!function(e, t) {
    "object" == typeof module && "object" == typeof module.exports ? module.exports = e.document ? t(e, !0) : function(e) {
            if (!e.document)
                throw new Error("jQuery requires a window with a document");
            return t(e)
        }
        : t(e)
}("undefined" != typeof window ? window : this, function(e, t) {
    function n(e) {
        var t = !!e && "length"in e && e.length
            , n = oe.type(e);
        return "function" !== n && !oe.isWindow(e) && ("array" === n || 0 === t || "number" == typeof t && t > 0 && t - 1 in e)
    }
    function r(e, t, n) {
        if (oe.isFunction(t))
            return oe.grep(e, function(e, r) {
                return !!t.call(e, r, e) !== n
            });
        if (t.nodeType)
            return oe.grep(e, function(e) {
                return e === t !== n
            });
        if ("string" == typeof t) {
            if (me.test(t))
                return oe.filter(t, e, n);
            t = oe.filter(t, e)
        }
        return oe.grep(e, function(e) {
            return Z.call(t, e) > -1 !== n
        })
    }
    function i(e, t) {
        for (; (e = e[t]) && 1 !== e.nodeType; )
            ;
        return e
    }
    function o(e) {
        var t = {};
        return oe.each(e.match(we) || [], function(e, n) {
            t[n] = !0
        }),
            t
    }
    function a() {
        G.removeEventListener("DOMContentLoaded", a),
            e.removeEventListener("load", a),
            oe.ready()
    }
    function s() {
        this.expando = oe.expando + s.uid++
    }
    function l(e, t, n) {
        var r;
        if (void 0 === n && 1 === e.nodeType)
            if (r = "data-" + t.replace(Se, "-$&").toLowerCase(),
                "string" == typeof (n = e.getAttribute(r))) {
                try {
                    n = "true" === n || "false" !== n && ("null" === n ? null : +n + "" === n ? +n : $e.test(n) ? oe.parseJSON(n) : n)
                } catch (e) {}
                je.set(e, t, n)
            } else
                n = void 0;
        return n
    }
    function c(e, t, n, r) {
        var i, o = 1, a = 20, s = r ? function() {
                return r.cur()
            }
            : function() {
                return oe.css(e, t, "")
            }
            , l = s(), c = n && n[3] || (oe.cssNumber[t] ? "" : "px"), u = (oe.cssNumber[t] || "px" !== c && +l) && Ee.exec(oe.css(e, t));
        if (u && u[3] !== c) {
            c = c || u[3],
                n = n || [],
                u = +l || 1;
            do {
                o = o || ".5",
                    u /= o,
                    oe.style(e, t, u + c)
            } while (o !== (o = s() / l) && 1 !== o && --a)
        }
        return n && (u = +u || +l || 0,
            i = n[1] ? u + (n[1] + 1) * n[2] : +n[2],
        r && (r.unit = c,
            r.start = u,
            r.end = i)),
            i
    }
    function u(e, t) {
        var n = void 0 !== e.getElementsByTagName ? e.getElementsByTagName(t || "*") : void 0 !== e.querySelectorAll ? e.querySelectorAll(t || "*") : [];
        return void 0 === t || t && oe.nodeName(e, t) ? oe.merge([e], n) : n
    }
    function d(e, t) {
        for (var n = 0, r = e.length; r > n; n++)
            Te.set(e[n], "globalEval", !t || Te.get(t[n], "globalEval"))
    }
    function f(e, t, n, r, i) {
        for (var o, a, s, l, c, f, p = t.createDocumentFragment(), h = [], m = 0, g = e.length; g > m; m++)
            if ((o = e[m]) || 0 === o)
                if ("object" === oe.type(o))
                    oe.merge(h, o.nodeType ? [o] : o);
                else if (qe.test(o)) {
                    for (a = a || p.appendChild(t.createElement("div")),
                             s = (Ne.exec(o) || ["", ""])[1].toLowerCase(),
                             l = Le[s] || Le._default,
                             a.innerHTML = l[1] + oe.htmlPrefilter(o) + l[2],
                             f = l[0]; f--; )
                        a = a.lastChild;
                    oe.merge(h, a.childNodes),
                        a = p.firstChild,
                        a.textContent = ""
                } else
                    h.push(t.createTextNode(o));
        for (p.textContent = "",
                 m = 0; o = h[m++]; )
            if (r && oe.inArray(o, r) > -1)
                i && i.push(o);
            else if (c = oe.contains(o.ownerDocument, o),
                    a = u(p.appendChild(o), "script"),
                c && d(a),
                    n)
                for (f = 0; o = a[f++]; )
                    Oe.test(o.type || "") && n.push(o);
        return p
    }
    function p() {
        return !0
    }
    function h() {
        return !1
    }
    function m() {
        try {
            return G.activeElement
        } catch (e) {}
    }
    function g(e, t, n, r, i, o) {
        var a, s;
        if ("object" == typeof t) {
            "string" != typeof n && (r = r || n,
                n = void 0);
            for (s in t)
                g(e, s, n, r, t[s], o);
            return e
        }
        if (null == r && null == i ? (i = n,
                r = n = void 0) : null == i && ("string" == typeof n ? (i = r,
                r = void 0) : (i = r,
                r = n,
                n = void 0)),
            !1 === i)
            i = h;
        else if (!i)
            return e;
        return 1 === o && (a = i,
            i = function(e) {
                return oe().off(e),
                    a.apply(this, arguments)
            }
            ,
            i.guid = a.guid || (a.guid = oe.guid++)),
            e.each(function() {
                oe.event.add(this, t, i, r, n)
            })
    }
    function v(e, t) {
        return oe.nodeName(e, "table") && oe.nodeName(11 !== t.nodeType ? t : t.firstChild, "tr") ? e.getElementsByTagName("tbody")[0] || e.appendChild(e.ownerDocument.createElement("tbody")) : e
    }
    function y(e) {
        return e.type = (null !== e.getAttribute("type")) + "/" + e.type,
            e
    }
    function b(e) {
        var t = ze.exec(e.type);
        return t ? e.type = t[1] : e.removeAttribute("type"),
            e
    }
    function w(e, t) {
        var n, r, i, o, a, s, l, c;
        if (1 === t.nodeType) {
            if (Te.hasData(e) && (o = Te.access(e),
                    a = Te.set(t, o),
                    c = o.events)) {
                delete a.handle,
                    a.events = {};
                for (i in c)
                    for (n = 0,
                             r = c[i].length; r > n; n++)
                        oe.event.add(t, i, c[i][n])
            }
            je.hasData(e) && (s = je.access(e),
                l = oe.extend({}, s),
                je.set(t, l))
        }
    }
    function x(e, t) {
        var n = t.nodeName.toLowerCase();
        "input" === n && Fe.test(e.type) ? t.checked = e.checked : "input" !== n && "textarea" !== n || (t.defaultValue = e.defaultValue)
    }
    function C(e, t, n, r) {
        t = Q.apply([], t);
        var i, o, a, s, l, c, d = 0, p = e.length, h = p - 1, m = t[0], g = oe.isFunction(m);
        if (g || p > 1 && "string" == typeof m && !re.checkClone && Re.test(m))
            return e.each(function(i) {
                var o = e.eq(i);
                g && (t[0] = m.call(this, i, o.html())),
                    C(o, t, n, r)
            });
        if (p && (i = f(t, e[0].ownerDocument, !1, e, r),
                o = i.firstChild,
            1 === i.childNodes.length && (i = o),
            o || r)) {
            for (a = oe.map(u(i, "script"), y),
                     s = a.length; p > d; d++)
                l = i,
                d !== h && (l = oe.clone(l, !0, !0),
                s && oe.merge(a, u(l, "script"))),
                    n.call(e[d], l, d);
            if (s)
                for (c = a[a.length - 1].ownerDocument,
                         oe.map(a, b),
                         d = 0; s > d; d++)
                    l = a[d],
                    Oe.test(l.type || "") && !Te.access(l, "globalEval") && oe.contains(c, l) && (l.src ? oe._evalUrl && oe._evalUrl(l.src) : oe.globalEval(l.textContent.replace(We, "")))
        }
        return e
    }
    function k(e, t, n) {
        for (var r, i = t ? oe.filter(t, e) : e, o = 0; null != (r = i[o]); o++)
            n || 1 !== r.nodeType || oe.cleanData(u(r)),
            r.parentNode && (n && oe.contains(r.ownerDocument, r) && d(u(r, "script")),
                r.parentNode.removeChild(r));
        return e
    }
    function T(e, t) {
        var n = oe(t.createElement(e)).appendTo(t.body)
            , r = oe.css(n[0], "display");
        return n.detach(),
            r
    }
    function j(e) {
        var t = G
            , n = Xe[e];
        return n || (n = T(e, t),
        "none" !== n && n || (Ue = (Ue || oe("<iframe frameborder='0' width='0' height='0'/>")).appendTo(t.documentElement),
            t = Ue[0].contentDocument,
            t.write(),
            t.close(),
            n = T(e, t),
            Ue.detach()),
            Xe[e] = n),
            n
    }
    function $(e, t, n) {
        var r, i, o, a, s = e.style;
        return n = n || Ge(e),
            a = n ? n.getPropertyValue(t) || n[t] : void 0,
        "" !== a && void 0 !== a || oe.contains(e.ownerDocument, e) || (a = oe.style(e, t)),
        n && !re.pixelMarginRight() && Ve.test(a) && Ye.test(t) && (r = s.width,
            i = s.minWidth,
            o = s.maxWidth,
            s.minWidth = s.maxWidth = s.width = a,
            a = n.width,
            s.width = r,
            s.minWidth = i,
            s.maxWidth = o),
            void 0 !== a ? a + "" : a
    }
    function S(e, t) {
        return {
            get: function() {
                return e() ? void delete this.get : (this.get = t).apply(this, arguments)
            }
        }
    }
    function A(e) {
        if (e in nt)
            return e;
        for (var t = e[0].toUpperCase() + e.slice(1), n = tt.length; n--; )
            if ((e = tt[n] + t)in nt)
                return e
    }
    function E(e, t, n) {
        var r = Ee.exec(t);
        return r ? Math.max(0, r[2] - (n || 0)) + (r[3] || "px") : t
    }
    function D(e, t, n, r, i) {
        for (var o = n === (r ? "border" : "content") ? 4 : "width" === t ? 1 : 0, a = 0; 4 > o; o += 2)
            "margin" === n && (a += oe.css(e, n + De[o], !0, i)),
                r ? ("content" === n && (a -= oe.css(e, "padding" + De[o], !0, i)),
                "margin" !== n && (a -= oe.css(e, "border" + De[o] + "Width", !0, i))) : (a += oe.css(e, "padding" + De[o], !0, i),
                "padding" !== n && (a += oe.css(e, "border" + De[o] + "Width", !0, i)));
        return a
    }
    function _(t, n, r) {
        var i = !0
            , o = "width" === n ? t.offsetWidth : t.offsetHeight
            , a = Ge(t)
            , s = "border-box" === oe.css(t, "boxSizing", !1, a);
        if (G.msFullscreenElement && e.top !== e && t.getClientRects().length && (o = Math.round(100 * t.getBoundingClientRect()[n])),
            0 >= o || null == o) {
            if (o = $(t, n, a),
                (0 > o || null == o) && (o = t.style[n]),
                    Ve.test(o))
                return o;
            i = s && (re.boxSizingReliable() || o === t.style[n]),
                o = parseFloat(o) || 0
        }
        return o + D(t, n, r || (s ? "border" : "content"), i, a) + "px"
    }
    function F(e, t) {
        for (var n, r, i, o = [], a = 0, s = e.length; s > a; a++)
            r = e[a],
            r.style && (o[a] = Te.get(r, "olddisplay"),
                n = r.style.display,
                t ? (o[a] || "none" !== n || (r.style.display = ""),
                "" === r.style.display && _e(r) && (o[a] = Te.access(r, "olddisplay", j(r.nodeName)))) : (i = _e(r),
                "none" === n && i || Te.set(r, "olddisplay", i ? n : oe.css(r, "display"))));
        for (a = 0; s > a; a++)
            r = e[a],
            r.style && (t && "none" !== r.style.display && "" !== r.style.display || (r.style.display = t ? o[a] || "" : "none"));
        return e
    }
    function N(e, t, n, r, i) {
        return new N.prototype.init(e,t,n,r,i)
    }
    function O() {
        return e.setTimeout(function() {
            rt = void 0
        }),
            rt = oe.now()
    }
    function L(e, t) {
        var n, r = 0, i = {
            height: e
        };
        for (t = t ? 1 : 0; 4 > r; r += 2 - t)
            n = De[r],
                i["margin" + n] = i["padding" + n] = e;
        return t && (i.opacity = i.width = e),
            i
    }
    function q(e, t, n) {
        for (var r, i = (P.tweeners[t] || []).concat(P.tweeners["*"]), o = 0, a = i.length; a > o; o++)
            if (r = i[o].call(n, t, e))
                return r
    }
    function M(e, t, n) {
        var r, i, o, a, s, l, c, u = this, d = {}, f = e.style, p = e.nodeType && _e(e), h = Te.get(e, "fxshow");
        n.queue || (s = oe._queueHooks(e, "fx"),
        null == s.unqueued && (s.unqueued = 0,
                l = s.empty.fire,
                s.empty.fire = function() {
                    s.unqueued || l()
                }
        ),
            s.unqueued++,
            u.always(function() {
                u.always(function() {
                    s.unqueued--,
                    oe.queue(e, "fx").length || s.empty.fire()
                })
            })),
        1 === e.nodeType && ("height"in t || "width"in t) && (n.overflow = [f.overflow, f.overflowX, f.overflowY],
            c = oe.css(e, "display"),
        "inline" === ("none" === c ? Te.get(e, "olddisplay") || j(e.nodeName) : c) && "none" === oe.css(e, "float") && (f.display = "inline-block")),
        n.overflow && (f.overflow = "hidden",
            u.always(function() {
                f.overflow = n.overflow[0],
                    f.overflowX = n.overflow[1],
                    f.overflowY = n.overflow[2]
            }));
        for (r in t)
            if (i = t[r],
                    ot.exec(i)) {
                if (delete t[r],
                        o = o || "toggle" === i,
                    i === (p ? "hide" : "show")) {
                    if ("show" !== i || !h || void 0 === h[r])
                        continue;
                    p = !0
                }
                d[r] = h && h[r] || oe.style(e, r)
            } else
                c = void 0;
        if (oe.isEmptyObject(d))
            "inline" === ("none" === c ? j(e.nodeName) : c) && (f.display = c);
        else {
            h ? "hidden"in h && (p = h.hidden) : h = Te.access(e, "fxshow", {}),
            o && (h.hidden = !p),
                p ? oe(e).show() : u.done(function() {
                    oe(e).hide()
                }),
                u.done(function() {
                    var t;
                    Te.remove(e, "fxshow");
                    for (t in d)
                        oe.style(e, t, d[t])
                });
            for (r in d)
                a = q(p ? h[r] : 0, r, u),
                r in h || (h[r] = a.start,
                p && (a.end = a.start,
                    a.start = "width" === r || "height" === r ? 1 : 0))
        }
    }
    function I(e, t) {
        var n, r, i, o, a;
        for (n in e)
            if (r = oe.camelCase(n),
                    i = t[r],
                    o = e[n],
                oe.isArray(o) && (i = o[1],
                    o = e[n] = o[0]),
                n !== r && (e[r] = o,
                    delete e[n]),
                (a = oe.cssHooks[r]) && "expand"in a) {
                o = a.expand(o),
                    delete e[r];
                for (n in o)
                    n in e || (e[n] = o[n],
                        t[n] = i)
            } else
                t[r] = i
    }
    function P(e, t, n) {
        var r, i, o = 0, a = P.prefilters.length, s = oe.Deferred().always(function() {
            delete l.elem
        }), l = function() {
            if (i)
                return !1;
            for (var t = rt || O(), n = Math.max(0, c.startTime + c.duration - t), r = n / c.duration || 0, o = 1 - r, a = 0, l = c.tweens.length; l > a; a++)
                c.tweens[a].run(o);
            return s.notifyWith(e, [c, o, n]),
                1 > o && l ? n : (s.resolveWith(e, [c]),
                    !1)
        }, c = s.promise({
            elem: e,
            props: oe.extend({}, t),
            opts: oe.extend(!0, {
                specialEasing: {},
                easing: oe.easing._default
            }, n),
            originalProperties: t,
            originalOptions: n,
            startTime: rt || O(),
            duration: n.duration,
            tweens: [],
            createTween: function(t, n) {
                var r = oe.Tween(e, c.opts, t, n, c.opts.specialEasing[t] || c.opts.easing);
                return c.tweens.push(r),
                    r
            },
            stop: function(t) {
                var n = 0
                    , r = t ? c.tweens.length : 0;
                if (i)
                    return this;
                for (i = !0; r > n; n++)
                    c.tweens[n].run(1);
                return t ? (s.notifyWith(e, [c, 1, 0]),
                    s.resolveWith(e, [c, t])) : s.rejectWith(e, [c, t]),
                    this
            }
        }), u = c.props;
        for (I(u, c.opts.specialEasing); a > o; o++)
            if (r = P.prefilters[o].call(c, e, u, c.opts))
                return oe.isFunction(r.stop) && (oe._queueHooks(c.elem, c.opts.queue).stop = oe.proxy(r.stop, r)),
                    r;
        return oe.map(u, q, c),
        oe.isFunction(c.opts.start) && c.opts.start.call(e, c),
            oe.fx.timer(oe.extend(l, {
                elem: e,
                anim: c,
                queue: c.opts.queue
            })),
            c.progress(c.opts.progress).done(c.opts.done, c.opts.complete).fail(c.opts.fail).always(c.opts.always)
    }
    function H(e) {
        return e.getAttribute && e.getAttribute("class") || ""
    }
    function B(e) {
        return function(t, n) {
            "string" != typeof t && (n = t,
                t = "*");
            var r, i = 0, o = t.toLowerCase().match(we) || [];
            if (oe.isFunction(n))
                for (; r = o[i++]; )
                    "+" === r[0] ? (r = r.slice(1) || "*",
                        (e[r] = e[r] || []).unshift(n)) : (e[r] = e[r] || []).push(n)
        }
    }
    function R(e, t, n, r) {
        function i(s) {
            var l;
            return o[s] = !0,
                oe.each(e[s] || [], function(e, s) {
                    var c = s(t, n, r);
                    return "string" != typeof c || a || o[c] ? a ? !(l = c) : void 0 : (t.dataTypes.unshift(c),
                        i(c),
                        !1)
                }),
                l
        }
        var o = {}
            , a = e === jt;
        return i(t.dataTypes[0]) || !o["*"] && i("*")
    }
    function z(e, t) {
        var n, r, i = oe.ajaxSettings.flatOptions || {};
        for (n in t)
            void 0 !== t[n] && ((i[n] ? e : r || (r = {}))[n] = t[n]);
        return r && oe.extend(!0, e, r),
            e
    }
    function W(e, t, n) {
        for (var r, i, o, a, s = e.contents, l = e.dataTypes; "*" === l[0]; )
            l.shift(),
            void 0 === r && (r = e.mimeType || t.getResponseHeader("Content-Type"));
        if (r)
            for (i in s)
                if (s[i] && s[i].test(r)) {
                    l.unshift(i);
                    break
                }
        if (l[0]in n)
            o = l[0];
        else {
            for (i in n) {
                if (!l[0] || e.converters[i + " " + l[0]]) {
                    o = i;
                    break
                }
                a || (a = i)
            }
            o = o || a
        }
        return o ? (o !== l[0] && l.unshift(o),
            n[o]) : void 0
    }
    function U(e, t, n, r) {
        var i, o, a, s, l, c = {}, u = e.dataTypes.slice();
        if (u[1])
            for (a in e.converters)
                c[a.toLowerCase()] = e.converters[a];
        for (o = u.shift(); o; )
            if (e.responseFields[o] && (n[e.responseFields[o]] = t),
                !l && r && e.dataFilter && (t = e.dataFilter(t, e.dataType)),
                    l = o,
                    o = u.shift())
                if ("*" === o)
                    o = l;
                else if ("*" !== l && l !== o) {
                    if (!(a = c[l + " " + o] || c["* " + o]))
                        for (i in c)
                            if (s = i.split(" "),
                                s[1] === o && (a = c[l + " " + s[0]] || c["* " + s[0]])) {
                                !0 === a ? a = c[i] : !0 !== c[i] && (o = s[0],
                                    u.unshift(s[1]));
                                break
                            }
                    if (!0 !== a)
                        if (a && e.throws)
                            t = a(t);
                        else
                            try {
                                t = a(t)
                            } catch (e) {
                                return {
                                    state: "parsererror",
                                    error: a ? e : "No conversion from " + l + " to " + o
                                }
                            }
                }
        return {
            state: "success",
            data: t
        }
    }
    function X(e, t, n, r) {
        var i;
        if (oe.isArray(t))
            oe.each(t, function(t, i) {
                n || Et.test(e) ? r(e, i) : X(e + "[" + ("object" == typeof i && null != i ? t : "") + "]", i, n, r)
            });
        else if (n || "object" !== oe.type(t))
            r(e, t);
        else
            for (i in t)
                X(e + "[" + i + "]", t[i], n, r)
    }
    function Y(e) {
        return oe.isWindow(e) ? e : 9 === e.nodeType && e.defaultView
    }
    var V = []
        , G = e.document
        , J = V.slice
        , Q = V.concat
        , K = V.push
        , Z = V.indexOf
        , ee = {}
        , te = ee.toString
        , ne = ee.hasOwnProperty
        , re = {}
        , ie = "2.2.2"
        , oe = function(e, t) {
        return new oe.fn.init(e,t)
    }
        , ae = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g
        , se = /^-ms-/
        , le = /-([\da-z])/gi
        , ce = function(e, t) {
        return t.toUpperCase()
    };
    oe.fn = oe.prototype = {
        jquery: ie,
        constructor: oe,
        selector: "",
        length: 0,
        toArray: function() {
            return J.call(this)
        },
        get: function(e) {
            return null != e ? 0 > e ? this[e + this.length] : this[e] : J.call(this)
        },
        pushStack: function(e) {
            var t = oe.merge(this.constructor(), e);
            return t.prevObject = this,
                t.context = this.context,
                t
        },
        each: function(e) {
            return oe.each(this, e)
        },
        map: function(e) {
            return this.pushStack(oe.map(this, function(t, n) {
                return e.call(t, n, t)
            }))
        },
        slice: function() {
            return this.pushStack(J.apply(this, arguments))
        },
        first: function() {
            return this.eq(0)
        },
        last: function() {
            return this.eq(-1)
        },
        eq: function(e) {
            var t = this.length
                , n = +e + (0 > e ? t : 0);
            return this.pushStack(n >= 0 && t > n ? [this[n]] : [])
        },
        end: function() {
            return this.prevObject || this.constructor()
        },
        push: K,
        sort: V.sort,
        splice: V.splice
    },
        oe.extend = oe.fn.extend = function() {
            var e, t, n, r, i, o, a = arguments[0] || {}, s = 1, l = arguments.length, c = !1;
            for ("boolean" == typeof a && (c = a,
                a = arguments[s] || {},
                s++),
                 "object" == typeof a || oe.isFunction(a) || (a = {}),
                 s === l && (a = this,
                     s--); l > s; s++)
                if (null != (e = arguments[s]))
                    for (t in e)
                        n = a[t],
                            r = e[t],
                        a !== r && (c && r && (oe.isPlainObject(r) || (i = oe.isArray(r))) ? (i ? (i = !1,
                            o = n && oe.isArray(n) ? n : []) : o = n && oe.isPlainObject(n) ? n : {},
                            a[t] = oe.extend(c, o, r)) : void 0 !== r && (a[t] = r));
            return a
        }
        ,
        oe.extend({
            expando: "jQuery" + (ie + Math.random()).replace(/\D/g, ""),
            isReady: !0,
            error: function(e) {
                throw new Error(e)
            },
            noop: function() {},
            isFunction: function(e) {
                return "function" === oe.type(e)
            },
            isArray: Array.isArray,
            isWindow: function(e) {
                return null != e && e === e.window
            },
            isNumeric: function(e) {
                var t = e && e.toString();
                return !oe.isArray(e) && t - parseFloat(t) + 1 >= 0
            },
            isPlainObject: function(e) {
                var t;
                if ("object" !== oe.type(e) || e.nodeType || oe.isWindow(e))
                    return !1;
                if (e.constructor && !ne.call(e, "constructor") && !ne.call(e.constructor.prototype || {}, "isPrototypeOf"))
                    return !1;
                for (t in e)
                    ;
                return void 0 === t || ne.call(e, t)
            },
            isEmptyObject: function(e) {
                var t;
                for (t in e)
                    return !1;
                return !0
            },
            type: function(e) {
                return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? ee[te.call(e)] || "object" : typeof e
            },
            globalEval: function(e) {
                var t, n = eval;
                (e = oe.trim(e)) && (1 === e.indexOf("use strict") ? (t = G.createElement("script"),
                    t.text = e,
                    G.head.appendChild(t).parentNode.removeChild(t)) : n(e))
            },
            camelCase: function(e) {
                return e.replace(se, "ms-").replace(le, ce)
            },
            nodeName: function(e, t) {
                return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase()
            },
            each: function(e, t) {
                var r, i = 0;
                if (n(e))
                    for (r = e.length; r > i && !1 !== t.call(e[i], i, e[i]); i++)
                        ;
                else
                    for (i in e)
                        if (!1 === t.call(e[i], i, e[i]))
                            break;
                return e
            },
            trim: function(e) {
                return null == e ? "" : (e + "").replace(ae, "")
            },
            makeArray: function(e, t) {
                var r = t || [];
                return null != e && (n(Object(e)) ? oe.merge(r, "string" == typeof e ? [e] : e) : K.call(r, e)),
                    r
            },
            inArray: function(e, t, n) {
                return null == t ? -1 : Z.call(t, e, n)
            },
            merge: function(e, t) {
                for (var n = +t.length, r = 0, i = e.length; n > r; r++)
                    e[i++] = t[r];
                return e.length = i,
                    e
            },
            grep: function(e, t, n) {
                for (var r = [], i = 0, o = e.length, a = !n; o > i; i++)
                    !t(e[i], i) !== a && r.push(e[i]);
                return r
            },
            map: function(e, t, r) {
                var i, o, a = 0, s = [];
                if (n(e))
                    for (i = e.length; i > a; a++)
                        null != (o = t(e[a], a, r)) && s.push(o);
                else
                    for (a in e)
                        null != (o = t(e[a], a, r)) && s.push(o);
                return Q.apply([], s)
            },
            guid: 1,
            proxy: function(e, t) {
                var n, r, i;
                return "string" == typeof t && (n = e[t],
                    t = e,
                    e = n),
                    oe.isFunction(e) ? (r = J.call(arguments, 2),
                        i = function() {
                            return e.apply(t || this, r.concat(J.call(arguments)))
                        }
                        ,
                        i.guid = e.guid = e.guid || oe.guid++,
                        i) : void 0
            },
            now: Date.now,
            support: re
        }),
    "function" == typeof Symbol && (oe.fn[Symbol.iterator] = V[Symbol.iterator]),
        oe.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function(e, t) {
            ee["[object " + t + "]"] = t.toLowerCase()
        });
    var ue = function(e) {
        function t(e, t, n, r) {
            var i, o, a, s, c, d, f, p, h = t && t.ownerDocument, m = t ? t.nodeType : 9;
            if (n = n || [],
                "string" != typeof e || !e || 1 !== m && 9 !== m && 11 !== m)
                return n;
            if (!r && ((t ? t.ownerDocument || t : I) !== D && E(t),
                    t = t || D,
                    F)) {
                if (11 !== m && (d = me.exec(e)))
                    if (i = d[1]) {
                        if (9 === m) {
                            if (!(a = t.getElementById(i)))
                                return n;
                            if (a.id === i)
                                return n.push(a),
                                    n
                        } else if (h && (a = h.getElementById(i)) && q(t, a) && a.id === i)
                            return n.push(a),
                                n
                    } else {
                        if (d[2])
                            return J.apply(n, t.getElementsByTagName(e)),
                                n;
                        if ((i = d[3]) && b.getElementsByClassName && t.getElementsByClassName)
                            return J.apply(n, t.getElementsByClassName(i)),
                                n
                    }
                if (b.qsa && !z[e + " "] && (!N || !N.test(e))) {
                    if (1 !== m)
                        h = t,
                            p = e;
                    else if ("object" !== t.nodeName.toLowerCase()) {
                        for ((s = t.getAttribute("id")) ? s = s.replace(ve, "\\$&") : t.setAttribute("id", s = M),
                                 f = k(e),
                                 o = f.length,
                                 c = ue.test(s) ? "#" + s : "[id='" + s + "']"; o--; )
                            f[o] = c + " " + u(f[o]);
                        p = f.join(","),
                            h = ge.test(e) && l(t.parentNode) || t
                    }
                    if (p)
                        try {
                            return J.apply(n, h.querySelectorAll(p)),
                                n
                        } catch (e) {} finally {
                            s === M && t.removeAttribute("id")
                        }
                }
            }
            return j(e.replace(oe, "$1"), t, n, r)
        }
        function n() {
            function e(n, r) {
                return t.push(n + " ") > w.cacheLength && delete e[t.shift()],
                    e[n + " "] = r
            }
            var t = [];
            return e
        }
        function r(e) {
            return e[M] = !0,
                e
        }
        function i(e) {
            var t = D.createElement("div");
            try {
                return !!e(t)
            } catch (e) {
                return !1
            } finally {
                t.parentNode && t.parentNode.removeChild(t),
                    t = null
            }
        }
        function o(e, t) {
            for (var n = e.split("|"), r = n.length; r--; )
                w.attrHandle[n[r]] = t
        }
        function a(e, t) {
            var n = t && e
                , r = n && 1 === e.nodeType && 1 === t.nodeType && (~t.sourceIndex || U) - (~e.sourceIndex || U);
            if (r)
                return r;
            if (n)
                for (; n = n.nextSibling; )
                    if (n === t)
                        return -1;
            return e ? 1 : -1
        }
        function s(e) {
            return r(function(t) {
                return t = +t,
                    r(function(n, r) {
                        for (var i, o = e([], n.length, t), a = o.length; a--; )
                            n[i = o[a]] && (n[i] = !(r[i] = n[i]))
                    })
            })
        }
        function l(e) {
            return e && void 0 !== e.getElementsByTagName && e
        }
        function c() {}
        function u(e) {
            for (var t = 0, n = e.length, r = ""; n > t; t++)
                r += e[t].value;
            return r
        }
        function d(e, t, n) {
            var r = t.dir
                , i = n && "parentNode" === r
                , o = H++;
            return t.first ? function(t, n, o) {
                    for (; t = t[r]; )
                        if (1 === t.nodeType || i)
                            return e(t, n, o)
                }
                : function(t, n, a) {
                    var s, l, c, u = [P, o];
                    if (a) {
                        for (; t = t[r]; )
                            if ((1 === t.nodeType || i) && e(t, n, a))
                                return !0
                    } else
                        for (; t = t[r]; )
                            if (1 === t.nodeType || i) {
                                if (c = t[M] || (t[M] = {}),
                                        l = c[t.uniqueID] || (c[t.uniqueID] = {}),
                                    (s = l[r]) && s[0] === P && s[1] === o)
                                    return u[2] = s[2];
                                if (l[r] = u,
                                        u[2] = e(t, n, a))
                                    return !0
                            }
                }
        }
        function f(e) {
            return e.length > 1 ? function(t, n, r) {
                    for (var i = e.length; i--; )
                        if (!e[i](t, n, r))
                            return !1;
                    return !0
                }
                : e[0]
        }
        function p(e, n, r) {
            for (var i = 0, o = n.length; o > i; i++)
                t(e, n[i], r);
            return r
        }
        function h(e, t, n, r, i) {
            for (var o, a = [], s = 0, l = e.length, c = null != t; l > s; s++)
                (o = e[s]) && (n && !n(o, r, i) || (a.push(o),
                c && t.push(s)));
            return a
        }
        function m(e, t, n, i, o, a) {
            return i && !i[M] && (i = m(i)),
            o && !o[M] && (o = m(o, a)),
                r(function(r, a, s, l) {
                    var c, u, d, f = [], m = [], g = a.length, v = r || p(t || "*", s.nodeType ? [s] : s, []), y = !e || !r && t ? v : h(v, f, e, s, l), b = n ? o || (r ? e : g || i) ? [] : a : y;
                    if (n && n(y, b, s, l),
                            i)
                        for (c = h(b, m),
                                 i(c, [], s, l),
                                 u = c.length; u--; )
                            (d = c[u]) && (b[m[u]] = !(y[m[u]] = d));
                    if (r) {
                        if (o || e) {
                            if (o) {
                                for (c = [],
                                         u = b.length; u--; )
                                    (d = b[u]) && c.push(y[u] = d);
                                o(null , b = [], c, l)
                            }
                            for (u = b.length; u--; )
                                (d = b[u]) && (c = o ? K(r, d) : f[u]) > -1 && (r[c] = !(a[c] = d))
                        }
                    } else
                        b = h(b === a ? b.splice(g, b.length) : b),
                            o ? o(null , a, b, l) : J.apply(a, b)
                })
        }
        function g(e) {
            for (var t, n, r, i = e.length, o = w.relative[e[0].type], a = o || w.relative[" "], s = o ? 1 : 0, l = d(function(e) {
                return e === t
            }, a, !0), c = d(function(e) {
                return K(t, e) > -1
            }, a, !0), p = [function(e, n, r) {
                var i = !o && (r || n !== $) || ((t = n).nodeType ? l(e, n, r) : c(e, n, r));
                return t = null ,
                    i
            }
            ]; i > s; s++)
                if (n = w.relative[e[s].type])
                    p = [d(f(p), n)];
                else {
                    if (n = w.filter[e[s].type].apply(null , e[s].matches),
                            n[M]) {
                        for (r = ++s; i > r && !w.relative[e[r].type]; r++)
                            ;
                        return m(s > 1 && f(p), s > 1 && u(e.slice(0, s - 1).concat({
                            value: " " === e[s - 2].type ? "*" : ""
                        })).replace(oe, "$1"), n, r > s && g(e.slice(s, r)), i > r && g(e = e.slice(r)), i > r && u(e))
                    }
                    p.push(n)
                }
            return f(p)
        }
        function v(e, n) {
            var i = n.length > 0
                , o = e.length > 0
                , a = function(r, a, s, l, c) {
                var u, d, f, p = 0, m = "0", g = r && [], v = [], y = $, b = r || o && w.find.TAG("*", c), x = P += null == y ? 1 : Math.random() || .1, C = b.length;
                for (c && ($ = a === D || a || c); m !== C && null != (u = b[m]); m++) {
                    if (o && u) {
                        for (d = 0,
                             a || u.ownerDocument === D || (E(u),
                                 s = !F); f = e[d++]; )
                            if (f(u, a || D, s)) {
                                l.push(u);
                                break
                            }
                        c && (P = x)
                    }
                    i && ((u = !f && u) && p--,
                    r && g.push(u))
                }
                if (p += m,
                    i && m !== p) {
                    for (d = 0; f = n[d++]; )
                        f(g, v, a, s);
                    if (r) {
                        if (p > 0)
                            for (; m--; )
                                g[m] || v[m] || (v[m] = V.call(l));
                        v = h(v)
                    }
                    J.apply(l, v),
                    c && !r && v.length > 0 && p + n.length > 1 && t.uniqueSort(l)
                }
                return c && (P = x,
                    $ = y),
                    g
            };
            return i ? r(a) : a
        }
        var y, b, w, x, C, k, T, j, $, S, A, E, D, _, F, N, O, L, q, M = "sizzle" + 1 * new Date, I = e.document, P = 0, H = 0, B = n(), R = n(), z = n(), W = function(e, t) {
            return e === t && (A = !0),
                0
        }, U = 1 << 31, X = {}.hasOwnProperty, Y = [], V = Y.pop, G = Y.push, J = Y.push, Q = Y.slice, K = function(e, t) {
            for (var n = 0, r = e.length; r > n; n++)
                if (e[n] === t)
                    return n;
            return -1
        }, Z = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", ee = "[\\x20\\t\\r\\n\\f]", te = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", ne = "\\[" + ee + "*(" + te + ")(?:" + ee + "*([*^$|!~]?=)" + ee + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + te + "))|)" + ee + "*\\]", re = ":(" + te + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + ne + ")*)|.*)\\)|)", ie = new RegExp(ee + "+","g"), oe = new RegExp("^" + ee + "+|((?:^|[^\\\\])(?:\\\\.)*)" + ee + "+$","g"), ae = new RegExp("^" + ee + "*," + ee + "*"), se = new RegExp("^" + ee + "*([>+~]|" + ee + ")" + ee + "*"), le = new RegExp("=" + ee + "*([^\\]'\"]*?)" + ee + "*\\]","g"), ce = new RegExp(re), ue = new RegExp("^" + te + "$"), de = {
            ID: new RegExp("^#(" + te + ")"),
            CLASS: new RegExp("^\\.(" + te + ")"),
            TAG: new RegExp("^(" + te + "|[*])"),
            ATTR: new RegExp("^" + ne),
            PSEUDO: new RegExp("^" + re),
            CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + ee + "*(even|odd|(([+-]|)(\\d*)n|)" + ee + "*(?:([+-]|)" + ee + "*(\\d+)|))" + ee + "*\\)|)","i"),
            bool: new RegExp("^(?:" + Z + ")$","i"),
            needsContext: new RegExp("^" + ee + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + ee + "*((?:-\\d)?\\d*)" + ee + "*\\)|)(?=[^-]|$)","i")
        }, fe = /^(?:input|select|textarea|button)$/i, pe = /^h\d$/i, he = /^[^{]+\{\s*\[native \w/, me = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, ge = /[+~]/, ve = /'|\\/g, ye = new RegExp("\\\\([\\da-f]{1,6}" + ee + "?|(" + ee + ")|.)","ig"), be = function(e, t, n) {
            var r = "0x" + t - 65536;
            return r !== r || n ? t : 0 > r ? String.fromCharCode(r + 65536) : String.fromCharCode(r >> 10 | 55296, 1023 & r | 56320)
        }, we = function() {
            E()
        };
        try {
            J.apply(Y = Q.call(I.childNodes), I.childNodes),
                Y[I.childNodes.length].nodeType
        } catch (e) {
            J = {
                apply: Y.length ? function(e, t) {
                        G.apply(e, Q.call(t))
                    }
                    : function(e, t) {
                        for (var n = e.length, r = 0; e[n++] = t[r++]; )
                            ;
                        e.length = n - 1
                    }
            }
        }
        b = t.support = {},
            C = t.isXML = function(e) {
                var t = e && (e.ownerDocument || e).documentElement;
                return !!t && "HTML" !== t.nodeName
            }
            ,
            E = t.setDocument = function(e) {
                var t, n, r = e ? e.ownerDocument || e : I;
                return r !== D && 9 === r.nodeType && r.documentElement ? (D = r,
                    _ = D.documentElement,
                    F = !C(D),
                (n = D.defaultView) && n.top !== n && (n.addEventListener ? n.addEventListener("unload", we, !1) : n.attachEvent && n.attachEvent("onunload", we)),
                    b.attributes = i(function(e) {
                        return e.className = "i",
                            !e.getAttribute("className")
                    }),
                    b.getElementsByTagName = i(function(e) {
                        return e.appendChild(D.createComment("")),
                            !e.getElementsByTagName("*").length
                    }),
                    b.getElementsByClassName = he.test(D.getElementsByClassName),
                    b.getById = i(function(e) {
                        return _.appendChild(e).id = M,
                        !D.getElementsByName || !D.getElementsByName(M).length
                    }),
                    b.getById ? (w.find.ID = function(e, t) {
                            if (void 0 !== t.getElementById && F) {
                                var n = t.getElementById(e);
                                return n ? [n] : []
                            }
                        }
                            ,
                            w.filter.ID = function(e) {
                                var t = e.replace(ye, be);
                                return function(e) {
                                    return e.getAttribute("id") === t
                                }
                            }
                    ) : (delete w.find.ID,
                            w.filter.ID = function(e) {
                                var t = e.replace(ye, be);
                                return function(e) {
                                    var n = void 0 !== e.getAttributeNode && e.getAttributeNode("id");
                                    return n && n.value === t
                                }
                            }
                    ),
                    w.find.TAG = b.getElementsByTagName ? function(e, t) {
                            return void 0 !== t.getElementsByTagName ? t.getElementsByTagName(e) : b.qsa ? t.querySelectorAll(e) : void 0
                        }
                        : function(e, t) {
                            var n, r = [], i = 0, o = t.getElementsByTagName(e);
                            if ("*" === e) {
                                for (; n = o[i++]; )
                                    1 === n.nodeType && r.push(n);
                                return r
                            }
                            return o
                        }
                    ,
                    w.find.CLASS = b.getElementsByClassName && function(e, t) {
                        return void 0 !== t.getElementsByClassName && F ? t.getElementsByClassName(e) : void 0
                    }
                    ,
                    O = [],
                    N = [],
                (b.qsa = he.test(D.querySelectorAll)) && (i(function(e) {
                    _.appendChild(e).innerHTML = "<a id='" + M + "'></a><select id='" + M + "-\r\\' msallowcapture=''><option selected=''></option></select>",
                    e.querySelectorAll("[msallowcapture^='']").length && N.push("[*^$]=" + ee + "*(?:''|\"\")"),
                    e.querySelectorAll("[selected]").length || N.push("\\[" + ee + "*(?:value|" + Z + ")"),
                    e.querySelectorAll("[id~=" + M + "-]").length || N.push("~="),
                    e.querySelectorAll(":checked").length || N.push(":checked"),
                    e.querySelectorAll("a#" + M + "+*").length || N.push(".#.+[+~]")
                }),
                    i(function(e) {
                        var t = D.createElement("input");
                        t.setAttribute("type", "hidden"),
                            e.appendChild(t).setAttribute("name", "D"),
                        e.querySelectorAll("[name=d]").length && N.push("name" + ee + "*[*^$|!~]?="),
                        e.querySelectorAll(":enabled").length || N.push(":enabled", ":disabled"),
                            e.querySelectorAll("*,:x"),
                            N.push(",.*:")
                    })),
                (b.matchesSelector = he.test(L = _.matches || _.webkitMatchesSelector || _.mozMatchesSelector || _.oMatchesSelector || _.msMatchesSelector)) && i(function(e) {
                    b.disconnectedMatch = L.call(e, "div"),
                        L.call(e, "[s!='']:x"),
                        O.push("!=", re)
                }),
                    N = N.length && new RegExp(N.join("|")),
                    O = O.length && new RegExp(O.join("|")),
                    t = he.test(_.compareDocumentPosition),
                    q = t || he.test(_.contains) ? function(e, t) {
                            var n = 9 === e.nodeType ? e.documentElement : e
                                , r = t && t.parentNode;
                            return e === r || !(!r || 1 !== r.nodeType || !(n.contains ? n.contains(r) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(r)))
                        }
                        : function(e, t) {
                            if (t)
                                for (; t = t.parentNode; )
                                    if (t === e)
                                        return !0;
                            return !1
                        }
                    ,
                    W = t ? function(e, t) {
                            if (e === t)
                                return A = !0,
                                    0;
                            var n = !e.compareDocumentPosition - !t.compareDocumentPosition;
                            return n || (n = (e.ownerDocument || e) === (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1,
                                1 & n || !b.sortDetached && t.compareDocumentPosition(e) === n ? e === D || e.ownerDocument === I && q(I, e) ? -1 : t === D || t.ownerDocument === I && q(I, t) ? 1 : S ? K(S, e) - K(S, t) : 0 : 4 & n ? -1 : 1)
                        }
                        : function(e, t) {
                            if (e === t)
                                return A = !0,
                                    0;
                            var n, r = 0, i = e.parentNode, o = t.parentNode, s = [e], l = [t];
                            if (!i || !o)
                                return e === D ? -1 : t === D ? 1 : i ? -1 : o ? 1 : S ? K(S, e) - K(S, t) : 0;
                            if (i === o)
                                return a(e, t);
                            for (n = e; n = n.parentNode; )
                                s.unshift(n);
                            for (n = t; n = n.parentNode; )
                                l.unshift(n);
                            for (; s[r] === l[r]; )
                                r++;
                            return r ? a(s[r], l[r]) : s[r] === I ? -1 : l[r] === I ? 1 : 0
                        }
                    ,
                    D) : D
            }
            ,
            t.matches = function(e, n) {
                return t(e, null , null , n)
            }
            ,
            t.matchesSelector = function(e, n) {
                if ((e.ownerDocument || e) !== D && E(e),
                        n = n.replace(le, "='$1']"),
                    b.matchesSelector && F && !z[n + " "] && (!O || !O.test(n)) && (!N || !N.test(n)))
                    try {
                        var r = L.call(e, n);
                        if (r || b.disconnectedMatch || e.document && 11 !== e.document.nodeType)
                            return r
                    } catch (e) {}
                return t(n, D, null , [e]).length > 0
            }
            ,
            t.contains = function(e, t) {
                return (e.ownerDocument || e) !== D && E(e),
                    q(e, t)
            }
            ,
            t.attr = function(e, t) {
                (e.ownerDocument || e) !== D && E(e);
                var n = w.attrHandle[t.toLowerCase()]
                    , r = n && X.call(w.attrHandle, t.toLowerCase()) ? n(e, t, !F) : void 0;
                return void 0 !== r ? r : b.attributes || !F ? e.getAttribute(t) : (r = e.getAttributeNode(t)) && r.specified ? r.value : null
            }
            ,
            t.error = function(e) {
                throw new Error("Syntax error, unrecognized expression: " + e)
            }
            ,
            t.uniqueSort = function(e) {
                var t, n = [], r = 0, i = 0;
                if (A = !b.detectDuplicates,
                        S = !b.sortStable && e.slice(0),
                        e.sort(W),
                        A) {
                    for (; t = e[i++]; )
                        t === e[i] && (r = n.push(i));
                    for (; r--; )
                        e.splice(n[r], 1)
                }
                return S = null ,
                    e
            }
            ,
            x = t.getText = function(e) {
                var t, n = "", r = 0, i = e.nodeType;
                if (i) {
                    if (1 === i || 9 === i || 11 === i) {
                        if ("string" == typeof e.textContent)
                            return e.textContent;
                        for (e = e.firstChild; e; e = e.nextSibling)
                            n += x(e)
                    } else if (3 === i || 4 === i)
                        return e.nodeValue
                } else
                    for (; t = e[r++]; )
                        n += x(t);
                return n
            }
            ,
            w = t.selectors = {
                cacheLength: 50,
                createPseudo: r,
                match: de,
                attrHandle: {},
                find: {},
                relative: {
                    ">": {
                        dir: "parentNode",
                        first: !0
                    },
                    " ": {
                        dir: "parentNode"
                    },
                    "+": {
                        dir: "previousSibling",
                        first: !0
                    },
                    "~": {
                        dir: "previousSibling"
                    }
                },
                preFilter: {
                    ATTR: function(e) {
                        return e[1] = e[1].replace(ye, be),
                            e[3] = (e[3] || e[4] || e[5] || "").replace(ye, be),
                        "~=" === e[2] && (e[3] = " " + e[3] + " "),
                            e.slice(0, 4)
                    },
                    CHILD: function(e) {
                        return e[1] = e[1].toLowerCase(),
                            "nth" === e[1].slice(0, 3) ? (e[3] || t.error(e[0]),
                                e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ("even" === e[3] || "odd" === e[3])),
                                e[5] = +(e[7] + e[8] || "odd" === e[3])) : e[3] && t.error(e[0]),
                            e
                    },
                    PSEUDO: function(e) {
                        var t, n = !e[6] && e[2];
                        return de.CHILD.test(e[0]) ? null : (e[3] ? e[2] = e[4] || e[5] || "" : n && ce.test(n) && (t = k(n, !0)) && (t = n.indexOf(")", n.length - t) - n.length) && (e[0] = e[0].slice(0, t),
                            e[2] = n.slice(0, t)),
                            e.slice(0, 3))
                    }
                },
                filter: {
                    TAG: function(e) {
                        var t = e.replace(ye, be).toLowerCase();
                        return "*" === e ? function() {
                                return !0
                            }
                            : function(e) {
                                return e.nodeName && e.nodeName.toLowerCase() === t
                            }
                    },
                    CLASS: function(e) {
                        var t = B[e + " "];
                        return t || (t = new RegExp("(^|" + ee + ")" + e + "(" + ee + "|$)")) && B(e, function(e) {
                            return t.test("string" == typeof e.className && e.className || void 0 !== e.getAttribute && e.getAttribute("class") || "")
                        })
                    },
                    ATTR: function(e, n, r) {
                        return function(i) {
                            var o = t.attr(i, e);
                            return null == o ? "!=" === n : !n || (o += "",
                                "=" === n ? o === r : "!=" === n ? o !== r : "^=" === n ? r && 0 === o.indexOf(r) : "*=" === n ? r && o.indexOf(r) > -1 : "$=" === n ? r && o.slice(-r.length) === r : "~=" === n ? (" " + o.replace(ie, " ") + " ").indexOf(r) > -1 : "|=" === n && (o === r || o.slice(0, r.length + 1) === r + "-"))
                        }
                    },
                    CHILD: function(e, t, n, r, i) {
                        var o = "nth" !== e.slice(0, 3)
                            , a = "last" !== e.slice(-4)
                            , s = "of-type" === t;
                        return 1 === r && 0 === i ? function(e) {
                                return !!e.parentNode
                            }
                            : function(t, n, l) {
                                var c, u, d, f, p, h, m = o !== a ? "nextSibling" : "previousSibling", g = t.parentNode, v = s && t.nodeName.toLowerCase(), y = !l && !s, b = !1;
                                if (g) {
                                    if (o) {
                                        for (; m; ) {
                                            for (f = t; f = f[m]; )
                                                if (s ? f.nodeName.toLowerCase() === v : 1 === f.nodeType)
                                                    return !1;
                                            h = m = "only" === e && !h && "nextSibling"
                                        }
                                        return !0
                                    }
                                    if (h = [a ? g.firstChild : g.lastChild],
                                        a && y) {
                                        for (f = g,
                                                 d = f[M] || (f[M] = {}),
                                                 u = d[f.uniqueID] || (d[f.uniqueID] = {}),
                                                 c = u[e] || [],
                                                 p = c[0] === P && c[1],
                                                 b = p && c[2],
                                                 f = p && g.childNodes[p]; f = ++p && f && f[m] || (b = p = 0) || h.pop(); )
                                            if (1 === f.nodeType && ++b && f === t) {
                                                u[e] = [P, p, b];
                                                break
                                            }
                                    } else if (y && (f = t,
                                            d = f[M] || (f[M] = {}),
                                            u = d[f.uniqueID] || (d[f.uniqueID] = {}),
                                            c = u[e] || [],
                                            p = c[0] === P && c[1],
                                            b = p),
                                        !1 === b)
                                        for (; (f = ++p && f && f[m] || (b = p = 0) || h.pop()) && ((s ? f.nodeName.toLowerCase() !== v : 1 !== f.nodeType) || !++b || (y && (d = f[M] || (f[M] = {}),
                                            u = d[f.uniqueID] || (d[f.uniqueID] = {}),
                                            u[e] = [P, b]),
                                        f !== t)); )
                                            ;
                                    return (b -= i) === r || b % r == 0 && b / r >= 0
                                }
                            }
                    },
                    PSEUDO: function(e, n) {
                        var i, o = w.pseudos[e] || w.setFilters[e.toLowerCase()] || t.error("unsupported pseudo: " + e);
                        return o[M] ? o(n) : o.length > 1 ? (i = [e, e, "", n],
                                w.setFilters.hasOwnProperty(e.toLowerCase()) ? r(function(e, t) {
                                    for (var r, i = o(e, n), a = i.length; a--; )
                                        r = K(e, i[a]),
                                            e[r] = !(t[r] = i[a])
                                }) : function(e) {
                                    return o(e, 0, i)
                                }
                        ) : o
                    }
                },
                pseudos: {
                    not: r(function(e) {
                        var t = []
                            , n = []
                            , i = T(e.replace(oe, "$1"));
                        return i[M] ? r(function(e, t, n, r) {
                            for (var o, a = i(e, null , r, []), s = e.length; s--; )
                                (o = a[s]) && (e[s] = !(t[s] = o))
                        }) : function(e, r, o) {
                            return t[0] = e,
                                i(t, null , o, n),
                                t[0] = null ,
                                !n.pop()
                        }
                    }),
                    has: r(function(e) {
                        return function(n) {
                            return t(e, n).length > 0
                        }
                    }),
                    contains: r(function(e) {
                        return e = e.replace(ye, be),
                            function(t) {
                                return (t.textContent || t.innerText || x(t)).indexOf(e) > -1
                            }
                    }),
                    lang: r(function(e) {
                        return ue.test(e || "") || t.error("unsupported lang: " + e),
                            e = e.replace(ye, be).toLowerCase(),
                            function(t) {
                                var n;
                                do {
                                    if (n = F ? t.lang : t.getAttribute("xml:lang") || t.getAttribute("lang"))
                                        return (n = n.toLowerCase()) === e || 0 === n.indexOf(e + "-")
                                } while ((t = t.parentNode) && 1 === t.nodeType);return !1
                            }
                    }),
                    target: function(t) {
                        var n = e.location && e.location.hash;
                        return n && n.slice(1) === t.id
                    },
                    root: function(e) {
                        return e === _
                    },
                    focus: function(e) {
                        return e === D.activeElement && (!D.hasFocus || D.hasFocus()) && !!(e.type || e.href || ~e.tabIndex)
                    },
                    enabled: function(e) {
                        return !1 === e.disabled
                    },
                    disabled: function(e) {
                        return !0 === e.disabled
                    },
                    checked: function(e) {
                        var t = e.nodeName.toLowerCase();
                        return "input" === t && !!e.checked || "option" === t && !!e.selected
                    },
                    selected: function(e) {
                        return e.parentNode && e.parentNode.selectedIndex,
                        !0 === e.selected
                    },
                    empty: function(e) {
                        for (e = e.firstChild; e; e = e.nextSibling)
                            if (e.nodeType < 6)
                                return !1;
                        return !0
                    },
                    parent: function(e) {
                        return !w.pseudos.empty(e)
                    },
                    header: function(e) {
                        return pe.test(e.nodeName)
                    },
                    input: function(e) {
                        return fe.test(e.nodeName)
                    },
                    button: function(e) {
                        var t = e.nodeName.toLowerCase();
                        return "input" === t && "button" === e.type || "button" === t
                    },
                    text: function(e) {
                        var t;
                        return "input" === e.nodeName.toLowerCase() && "text" === e.type && (null == (t = e.getAttribute("type")) || "text" === t.toLowerCase())
                    },
                    first: s(function() {
                        return [0]
                    }),
                    last: s(function(e, t) {
                        return [t - 1]
                    }),
                    eq: s(function(e, t, n) {
                        return [0 > n ? n + t : n]
                    }),
                    even: s(function(e, t) {
                        for (var n = 0; t > n; n += 2)
                            e.push(n);
                        return e
                    }),
                    odd: s(function(e, t) {
                        for (var n = 1; t > n; n += 2)
                            e.push(n);
                        return e
                    }),
                    lt: s(function(e, t, n) {
                        for (var r = 0 > n ? n + t : n; --r >= 0; )
                            e.push(r);
                        return e
                    }),
                    gt: s(function(e, t, n) {
                        for (var r = 0 > n ? n + t : n; ++r < t; )
                            e.push(r);
                        return e
                    })
                }
            },
            w.pseudos.nth = w.pseudos.eq;
        for (y in {
            radio: !0,
            checkbox: !0,
            file: !0,
            password: !0,
            image: !0
        })
            w.pseudos[y] = function(e) {
                return function(t) {
                    return "input" === t.nodeName.toLowerCase() && t.type === e
                }
            }(y);
        for (y in {
            submit: !0,
            reset: !0
        })
            w.pseudos[y] = function(e) {
                return function(t) {
                    var n = t.nodeName.toLowerCase();
                    return ("input" === n || "button" === n) && t.type === e
                }
            }(y);
        return c.prototype = w.filters = w.pseudos,
            w.setFilters = new c,
            k = t.tokenize = function(e, n) {
                var r, i, o, a, s, l, c, u = R[e + " "];
                if (u)
                    return n ? 0 : u.slice(0);
                for (s = e,
                         l = [],
                         c = w.preFilter; s; ) {
                    r && !(i = ae.exec(s)) || (i && (s = s.slice(i[0].length) || s),
                        l.push(o = [])),
                        r = !1,
                    (i = se.exec(s)) && (r = i.shift(),
                        o.push({
                            value: r,
                            type: i[0].replace(oe, " ")
                        }),
                        s = s.slice(r.length));
                    for (a in w.filter)
                        !(i = de[a].exec(s)) || c[a] && !(i = c[a](i)) || (r = i.shift(),
                            o.push({
                                value: r,
                                type: a,
                                matches: i
                            }),
                            s = s.slice(r.length));
                    if (!r)
                        break
                }
                return n ? s.length : s ? t.error(e) : R(e, l).slice(0)
            }
            ,
            T = t.compile = function(e, t) {
                var n, r = [], i = [], o = z[e + " "];
                if (!o) {
                    for (t || (t = k(e)),
                             n = t.length; n--; )
                        o = g(t[n]),
                            o[M] ? r.push(o) : i.push(o);
                    o = z(e, v(i, r)),
                        o.selector = e
                }
                return o
            }
            ,
            j = t.select = function(e, t, n, r) {
                var i, o, a, s, c, d = "function" == typeof e && e, f = !r && k(e = d.selector || e);
                if (n = n || [],
                    1 === f.length) {
                    if (o = f[0] = f[0].slice(0),
                        o.length > 2 && "ID" === (a = o[0]).type && b.getById && 9 === t.nodeType && F && w.relative[o[1].type]) {
                        if (!(t = (w.find.ID(a.matches[0].replace(ye, be), t) || [])[0]))
                            return n;
                        d && (t = t.parentNode),
                            e = e.slice(o.shift().value.length)
                    }
                    for (i = de.needsContext.test(e) ? 0 : o.length; i-- && (a = o[i],
                        !w.relative[s = a.type]); )
                        if ((c = w.find[s]) && (r = c(a.matches[0].replace(ye, be), ge.test(o[0].type) && l(t.parentNode) || t))) {
                            if (o.splice(i, 1),
                                    !(e = r.length && u(o)))
                                return J.apply(n, r),
                                    n;
                            break
                        }
                }
                return (d || T(e, f))(r, t, !F, n, !t || ge.test(e) && l(t.parentNode) || t),
                    n
            }
            ,
            b.sortStable = M.split("").sort(W).join("") === M,
            b.detectDuplicates = !!A,
            E(),
            b.sortDetached = i(function(e) {
                return 1 & e.compareDocumentPosition(D.createElement("div"))
            }),
        i(function(e) {
            return e.innerHTML = "<a href='#'></a>",
            "#" === e.firstChild.getAttribute("href")
        }) || o("type|href|height|width", function(e, t, n) {
            return n ? void 0 : e.getAttribute(t, "type" === t.toLowerCase() ? 1 : 2)
        }),
        b.attributes && i(function(e) {
            return e.innerHTML = "<input/>",
                e.firstChild.setAttribute("value", ""),
            "" === e.firstChild.getAttribute("value")
        }) || o("value", function(e, t, n) {
            return n || "input" !== e.nodeName.toLowerCase() ? void 0 : e.defaultValue
        }),
        i(function(e) {
            return null == e.getAttribute("disabled")
        }) || o(Z, function(e, t, n) {
            var r;
            return n ? void 0 : !0 === e[t] ? t.toLowerCase() : (r = e.getAttributeNode(t)) && r.specified ? r.value : null
        }),
            t
    }(e);
    oe.find = ue,
        oe.expr = ue.selectors,
        oe.expr[":"] = oe.expr.pseudos,
        oe.uniqueSort = oe.unique = ue.uniqueSort,
        oe.text = ue.getText,
        oe.isXMLDoc = ue.isXML,
        oe.contains = ue.contains;
    var de = function(e, t, n) {
        for (var r = [], i = void 0 !== n; (e = e[t]) && 9 !== e.nodeType; )
            if (1 === e.nodeType) {
                if (i && oe(e).is(n))
                    break;
                r.push(e)
            }
        return r
    }
        , fe = function(e, t) {
        for (var n = []; e; e = e.nextSibling)
            1 === e.nodeType && e !== t && n.push(e);
        return n
    }
        , pe = oe.expr.match.needsContext
        , he = /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/
        , me = /^.[^:#\[\.,]*$/;
    oe.filter = function(e, t, n) {
        var r = t[0];
        return n && (e = ":not(" + e + ")"),
            1 === t.length && 1 === r.nodeType ? oe.find.matchesSelector(r, e) ? [r] : [] : oe.find.matches(e, oe.grep(t, function(e) {
                return 1 === e.nodeType
            }))
    }
        ,
        oe.fn.extend({
            find: function(e) {
                var t, n = this.length, r = [], i = this;
                if ("string" != typeof e)
                    return this.pushStack(oe(e).filter(function() {
                        for (t = 0; n > t; t++)
                            if (oe.contains(i[t], this))
                                return !0
                    }));
                for (t = 0; n > t; t++)
                    oe.find(e, i[t], r);
                return r = this.pushStack(n > 1 ? oe.unique(r) : r),
                    r.selector = this.selector ? this.selector + " " + e : e,
                    r
            },
            filter: function(e) {
                return this.pushStack(r(this, e || [], !1))
            },
            not: function(e) {
                return this.pushStack(r(this, e || [], !0))
            },
            is: function(e) {
                return !!r(this, "string" == typeof e && pe.test(e) ? oe(e) : e || [], !1).length
            }
        });
    var ge, ve = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/;
    (oe.fn.init = function(e, t, n) {
            var r, i;
            if (!e)
                return this;
            if (n = n || ge,
                "string" == typeof e) {
                if (!(r = "<" === e[0] && ">" === e[e.length - 1] && e.length >= 3 ? [null , e, null ] : ve.exec(e)) || !r[1] && t)
                    return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e);
                if (r[1]) {
                    if (t = t instanceof oe ? t[0] : t,
                            oe.merge(this, oe.parseHTML(r[1], t && t.nodeType ? t.ownerDocument || t : G, !0)),
                        he.test(r[1]) && oe.isPlainObject(t))
                        for (r in t)
                            oe.isFunction(this[r]) ? this[r](t[r]) : this.attr(r, t[r]);
                    return this
                }
                return i = G.getElementById(r[2]),
                i && i.parentNode && (this.length = 1,
                    this[0] = i),
                    this.context = G,
                    this.selector = e,
                    this
            }
            return e.nodeType ? (this.context = this[0] = e,
                this.length = 1,
                this) : oe.isFunction(e) ? void 0 !== n.ready ? n.ready(e) : e(oe) : (void 0 !== e.selector && (this.selector = e.selector,
                this.context = e.context),
                oe.makeArray(e, this))
        }
    ).prototype = oe.fn,
        ge = oe(G);
    var ye = /^(?:parents|prev(?:Until|All))/
        , be = {
        children: !0,
        contents: !0,
        next: !0,
        prev: !0
    };
    oe.fn.extend({
        has: function(e) {
            var t = oe(e, this)
                , n = t.length;
            return this.filter(function() {
                for (var e = 0; n > e; e++)
                    if (oe.contains(this, t[e]))
                        return !0
            })
        },
        closest: function(e, t) {
            for (var n, r = 0, i = this.length, o = [], a = pe.test(e) || "string" != typeof e ? oe(e, t || this.context) : 0; i > r; r++)
                for (n = this[r]; n && n !== t; n = n.parentNode)
                    if (n.nodeType < 11 && (a ? a.index(n) > -1 : 1 === n.nodeType && oe.find.matchesSelector(n, e))) {
                        o.push(n);
                        break
                    }
            return this.pushStack(o.length > 1 ? oe.uniqueSort(o) : o)
        },
        index: function(e) {
            return e ? "string" == typeof e ? Z.call(oe(e), this[0]) : Z.call(this, e.jquery ? e[0] : e) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1
        },
        add: function(e, t) {
            return this.pushStack(oe.uniqueSort(oe.merge(this.get(), oe(e, t))))
        },
        addBack: function(e) {
            return this.add(null == e ? this.prevObject : this.prevObject.filter(e))
        }
    }),
        oe.each({
            parent: function(e) {
                var t = e.parentNode;
                return t && 11 !== t.nodeType ? t : null
            },
            parents: function(e) {
                return de(e, "parentNode")
            },
            parentsUntil: function(e, t, n) {
                return de(e, "parentNode", n)
            },
            next: function(e) {
                return i(e, "nextSibling")
            },
            prev: function(e) {
                return i(e, "previousSibling")
            },
            nextAll: function(e) {
                return de(e, "nextSibling")
            },
            prevAll: function(e) {
                return de(e, "previousSibling")
            },
            nextUntil: function(e, t, n) {
                return de(e, "nextSibling", n)
            },
            prevUntil: function(e, t, n) {
                return de(e, "previousSibling", n)
            },
            siblings: function(e) {
                return fe((e.parentNode || {}).firstChild, e)
            },
            children: function(e) {
                return fe(e.firstChild)
            },
            contents: function(e) {
                return e.contentDocument || oe.merge([], e.childNodes)
            }
        }, function(e, t) {
            oe.fn[e] = function(n, r) {
                var i = oe.map(this, t, n);
                return "Until" !== e.slice(-5) && (r = n),
                r && "string" == typeof r && (i = oe.filter(r, i)),
                this.length > 1 && (be[e] || oe.uniqueSort(i),
                ye.test(e) && i.reverse()),
                    this.pushStack(i)
            }
        });
    var we = /\S+/g;
    oe.Callbacks = function(e) {
        e = "string" == typeof e ? o(e) : oe.extend({}, e);
        var t, n, r, i, a = [], s = [], l = -1, c = function() {
            for (i = e.once,
                     r = t = !0; s.length; l = -1)
                for (n = s.shift(); ++l < a.length; )
                    !1 === a[l].apply(n[0], n[1]) && e.stopOnFalse && (l = a.length,
                        n = !1);
            e.memory || (n = !1),
                t = !1,
            i && (a = n ? [] : "")
        }, u = {
            add: function() {
                return a && (n && !t && (l = a.length - 1,
                    s.push(n)),
                    function t(n) {
                        oe.each(n, function(n, r) {
                            oe.isFunction(r) ? e.unique && u.has(r) || a.push(r) : r && r.length && "string" !== oe.type(r) && t(r)
                        })
                    }(arguments),
                n && !t && c()),
                    this
            },
            remove: function() {
                return oe.each(arguments, function(e, t) {
                    for (var n; (n = oe.inArray(t, a, n)) > -1; )
                        a.splice(n, 1),
                        l >= n && l--
                }),
                    this
            },
            has: function(e) {
                return e ? oe.inArray(e, a) > -1 : a.length > 0
            },
            empty: function() {
                return a && (a = []),
                    this
            },
            disable: function() {
                return i = s = [],
                    a = n = "",
                    this
            },
            disabled: function() {
                return !a
            },
            lock: function() {
                return i = s = [],
                n || (a = n = ""),
                    this
            },
            locked: function() {
                return !!i
            },
            fireWith: function(e, n) {
                return i || (n = n || [],
                    n = [e, n.slice ? n.slice() : n],
                    s.push(n),
                t || c()),
                    this
            },
            fire: function() {
                return u.fireWith(this, arguments),
                    this
            },
            fired: function() {
                return !!r
            }
        };
        return u
    }
        ,
        oe.extend({
            Deferred: function(e) {
                var t = [["resolve", "done", oe.Callbacks("once memory"), "resolved"], ["reject", "fail", oe.Callbacks("once memory"), "rejected"], ["notify", "progress", oe.Callbacks("memory")]]
                    , n = "pending"
                    , r = {
                    state: function() {
                        return n
                    },
                    always: function() {
                        return i.done(arguments).fail(arguments),
                            this
                    },
                    then: function() {
                        var e = arguments;
                        return oe.Deferred(function(n) {
                            oe.each(t, function(t, o) {
                                var a = oe.isFunction(e[t]) && e[t];
                                i[o[1]](function() {
                                    var e = a && a.apply(this, arguments);
                                    e && oe.isFunction(e.promise) ? e.promise().progress(n.notify).done(n.resolve).fail(n.reject) : n[o[0] + "With"](this === r ? n.promise() : this, a ? [e] : arguments)
                                })
                            }),
                                e = null
                        }).promise()
                    },
                    promise: function(e) {
                        return null != e ? oe.extend(e, r) : r
                    }
                }
                    , i = {};
                return r.pipe = r.then,
                    oe.each(t, function(e, o) {
                        var a = o[2]
                            , s = o[3];
                        r[o[1]] = a.add,
                        s && a.add(function() {
                            n = s
                        }, t[1 ^ e][2].disable, t[2][2].lock),
                            i[o[0]] = function() {
                                return i[o[0] + "With"](this === i ? r : this, arguments),
                                    this
                            }
                            ,
                            i[o[0] + "With"] = a.fireWith
                    }),
                    r.promise(i),
                e && e.call(i, i),
                    i
            },
            when: function(e) {
                var t, n, r, i = 0, o = J.call(arguments), a = o.length, s = 1 !== a || e && oe.isFunction(e.promise) ? a : 0, l = 1 === s ? e : oe.Deferred(), c = function(e, n, r) {
                    return function(i) {
                        n[e] = this,
                            r[e] = arguments.length > 1 ? J.call(arguments) : i,
                            r === t ? l.notifyWith(n, r) : --s || l.resolveWith(n, r)
                    }
                };
                if (a > 1)
                    for (t = new Array(a),
                             n = new Array(a),
                             r = new Array(a); a > i; i++)
                        o[i] && oe.isFunction(o[i].promise) ? o[i].promise().progress(c(i, n, t)).done(c(i, r, o)).fail(l.reject) : --s;
                return s || l.resolveWith(r, o),
                    l.promise()
            }
        });
    var xe;
    oe.fn.ready = function(e) {
        return oe.ready.promise().done(e),
            this
    }
        ,
        oe.extend({
            isReady: !1,
            readyWait: 1,
            holdReady: function(e) {
                e ? oe.readyWait++ : oe.ready(!0)
            },
            ready: function(e) {
                (!0 === e ? --oe.readyWait : oe.isReady) || (oe.isReady = !0,
                !0 !== e && --oe.readyWait > 0 || (xe.resolveWith(G, [oe]),
                oe.fn.triggerHandler && (oe(G).triggerHandler("ready"),
                    oe(G).off("ready"))))
            }
        }),
        oe.ready.promise = function(t) {
            return xe || (xe = oe.Deferred(),
                "complete" === G.readyState || "loading" !== G.readyState && !G.documentElement.doScroll ? e.setTimeout(oe.ready) : (G.addEventListener("DOMContentLoaded", a),
                    e.addEventListener("load", a))),
                xe.promise(t)
        }
        ,
        oe.ready.promise();
    var Ce = function(e, t, n, r, i, o, a) {
        var s = 0
            , l = e.length
            , c = null == n;
        if ("object" === oe.type(n)) {
            i = !0;
            for (s in n)
                Ce(e, t, s, n[s], !0, o, a)
        } else if (void 0 !== r && (i = !0,
            oe.isFunction(r) || (a = !0),
            c && (a ? (t.call(e, r),
                t = null ) : (c = t,
                    t = function(e, t, n) {
                        return c.call(oe(e), n)
                    }
            )),
                t))
            for (; l > s; s++)
                t(e[s], n, a ? r : r.call(e[s], s, t(e[s], n)));
        return i ? e : c ? t.call(e) : l ? t(e[0], n) : o
    }
        , ke = function(e) {
        return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType
    };
    s.uid = 1,
        s.prototype = {
            register: function(e, t) {
                var n = t || {};
                return e.nodeType ? e[this.expando] = n : Object.defineProperty(e, this.expando, {
                    value: n,
                    writable: !0,
                    configurable: !0
                }),
                    e[this.expando]
            },
            cache: function(e) {
                if (!ke(e))
                    return {};
                var t = e[this.expando];
                return t || (t = {},
                ke(e) && (e.nodeType ? e[this.expando] = t : Object.defineProperty(e, this.expando, {
                    value: t,
                    configurable: !0
                }))),
                    t
            },
            set: function(e, t, n) {
                var r, i = this.cache(e);
                if ("string" == typeof t)
                    i[t] = n;
                else
                    for (r in t)
                        i[r] = t[r];
                return i
            },
            get: function(e, t) {
                return void 0 === t ? this.cache(e) : e[this.expando] && e[this.expando][t]
            },
            access: function(e, t, n) {
                var r;
                return void 0 === t || t && "string" == typeof t && void 0 === n ? (r = this.get(e, t),
                    void 0 !== r ? r : this.get(e, oe.camelCase(t))) : (this.set(e, t, n),
                    void 0 !== n ? n : t)
            },
            remove: function(e, t) {
                var n, r, i, o = e[this.expando];
                if (void 0 !== o) {
                    if (void 0 === t)
                        this.register(e);
                    else {
                        oe.isArray(t) ? r = t.concat(t.map(oe.camelCase)) : (i = oe.camelCase(t),
                            t in o ? r = [t, i] : (r = i,
                                r = r in o ? [r] : r.match(we) || [])),
                            n = r.length;
                        for (; n--; )
                            delete o[r[n]]
                    }
                    (void 0 === t || oe.isEmptyObject(o)) && (e.nodeType ? e[this.expando] = void 0 : delete e[this.expando])
                }
            },
            hasData: function(e) {
                var t = e[this.expando];
                return void 0 !== t && !oe.isEmptyObject(t)
            }
        };
    var Te = new s
        , je = new s
        , $e = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/
        , Se = /[A-Z]/g;
    oe.extend({
        hasData: function(e) {
            return je.hasData(e) || Te.hasData(e)
        },
        data: function(e, t, n) {
            return je.access(e, t, n)
        },
        removeData: function(e, t) {
            je.remove(e, t)
        },
        _data: function(e, t, n) {
            return Te.access(e, t, n)
        },
        _removeData: function(e, t) {
            Te.remove(e, t)
        }
    }),
        oe.fn.extend({
            data: function(e, t) {
                var n, r, i, o = this[0], a = o && o.attributes;
                if (void 0 === e) {
                    if (this.length && (i = je.get(o),
                        1 === o.nodeType && !Te.get(o, "hasDataAttrs"))) {
                        for (n = a.length; n--; )
                            a[n] && (r = a[n].name,
                            0 === r.indexOf("data-") && (r = oe.camelCase(r.slice(5)),
                                l(o, r, i[r])));
                        Te.set(o, "hasDataAttrs", !0)
                    }
                    return i
                }
                return "object" == typeof e ? this.each(function() {
                    je.set(this, e)
                }) : Ce(this, function(t) {
                    var n, r;
                    if (o && void 0 === t) {
                        if (void 0 !== (n = je.get(o, e) || je.get(o, e.replace(Se, "-$&").toLowerCase())))
                            return n;
                        if (r = oe.camelCase(e),
                            void 0 !== (n = je.get(o, r)))
                            return n;
                        if (void 0 !== (n = l(o, r, void 0)))
                            return n
                    } else
                        r = oe.camelCase(e),
                            this.each(function() {
                                var n = je.get(this, r);
                                je.set(this, r, t),
                                e.indexOf("-") > -1 && void 0 !== n && je.set(this, e, t)
                            })
                }, null , t, arguments.length > 1, null , !0)
            },
            removeData: function(e) {
                return this.each(function() {
                    je.remove(this, e)
                })
            }
        }),
        oe.extend({
            queue: function(e, t, n) {
                var r;
                return e ? (t = (t || "fx") + "queue",
                    r = Te.get(e, t),
                n && (!r || oe.isArray(n) ? r = Te.access(e, t, oe.makeArray(n)) : r.push(n)),
                r || []) : void 0
            },
            dequeue: function(e, t) {
                t = t || "fx";
                var n = oe.queue(e, t)
                    , r = n.length
                    , i = n.shift()
                    , o = oe._queueHooks(e, t)
                    , a = function() {
                    oe.dequeue(e, t)
                };
                "inprogress" === i && (i = n.shift(),
                    r--),
                i && ("fx" === t && n.unshift("inprogress"),
                    delete o.stop,
                    i.call(e, a, o)),
                !r && o && o.empty.fire()
            },
            _queueHooks: function(e, t) {
                var n = t + "queueHooks";
                return Te.get(e, n) || Te.access(e, n, {
                    empty: oe.Callbacks("once memory").add(function() {
                        Te.remove(e, [t + "queue", n])
                    })
                })
            }
        }),
        oe.fn.extend({
            queue: function(e, t) {
                var n = 2;
                return "string" != typeof e && (t = e,
                    e = "fx",
                    n--),
                    arguments.length < n ? oe.queue(this[0], e) : void 0 === t ? this : this.each(function() {
                        var n = oe.queue(this, e, t);
                        oe._queueHooks(this, e),
                        "fx" === e && "inprogress" !== n[0] && oe.dequeue(this, e)
                    })
            },
            dequeue: function(e) {
                return this.each(function() {
                    oe.dequeue(this, e)
                })
            },
            clearQueue: function(e) {
                return this.queue(e || "fx", [])
            },
            promise: function(e, t) {
                var n, r = 1, i = oe.Deferred(), o = this, a = this.length, s = function() {
                    --r || i.resolveWith(o, [o])
                };
                for ("string" != typeof e && (t = e,
                    e = void 0),
                         e = e || "fx"; a--; )
                    (n = Te.get(o[a], e + "queueHooks")) && n.empty && (r++,
                        n.empty.add(s));
                return s(),
                    i.promise(t)
            }
        });
    var Ae = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source
        , Ee = new RegExp("^(?:([+-])=|)(" + Ae + ")([a-z%]*)$","i")
        , De = ["Top", "Right", "Bottom", "Left"]
        , _e = function(e, t) {
        return e = t || e,
        "none" === oe.css(e, "display") || !oe.contains(e.ownerDocument, e)
    }
        , Fe = /^(?:checkbox|radio)$/i
        , Ne = /<([\w:-]+)/
        , Oe = /^$|\/(?:java|ecma)script/i
        , Le = {
        option: [1, "<select multiple='multiple'>", "</select>"],
        thead: [1, "<table>", "</table>"],
        col: [2, "<table><colgroup>", "</colgroup></table>"],
        tr: [2, "<table><tbody>", "</tbody></table>"],
        td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
        _default: [0, "", ""]
    };
    Le.optgroup = Le.option,
        Le.tbody = Le.tfoot = Le.colgroup = Le.caption = Le.thead,
        Le.th = Le.td;
    var qe = /<|&#?\w+;/;
    !function() {
        var e = G.createDocumentFragment()
            , t = e.appendChild(G.createElement("div"))
            , n = G.createElement("input");
        n.setAttribute("type", "radio"),
            n.setAttribute("checked", "checked"),
            n.setAttribute("name", "t"),
            t.appendChild(n),
            re.checkClone = t.cloneNode(!0).cloneNode(!0).lastChild.checked,
            t.innerHTML = "<textarea>x</textarea>",
            re.noCloneChecked = !!t.cloneNode(!0).lastChild.defaultValue
    }();
    var Me = /^key/
        , Ie = /^(?:mouse|pointer|contextmenu|drag|drop)|click/
        , Pe = /^([^.]*)(?:\.(.+)|)/;
    oe.event = {
        global: {},
        add: function(e, t, n, r, i) {
            var o, a, s, l, c, u, d, f, p, h, m, g = Te.get(e);
            if (g)
                for (n.handler && (o = n,
                    n = o.handler,
                    i = o.selector),
                     n.guid || (n.guid = oe.guid++),
                     (l = g.events) || (l = g.events = {}),
                     (a = g.handle) || (a = g.handle = function(t) {
                             return void 0 !== oe && oe.event.triggered !== t.type ? oe.event.dispatch.apply(e, arguments) : void 0
                         }
                     ),
                         t = (t || "").match(we) || [""],
                         c = t.length; c--; )
                    s = Pe.exec(t[c]) || [],
                        p = m = s[1],
                        h = (s[2] || "").split(".").sort(),
                    p && (d = oe.event.special[p] || {},
                        p = (i ? d.delegateType : d.bindType) || p,
                        d = oe.event.special[p] || {},
                        u = oe.extend({
                            type: p,
                            origType: m,
                            data: r,
                            handler: n,
                            guid: n.guid,
                            selector: i,
                            needsContext: i && oe.expr.match.needsContext.test(i),
                            namespace: h.join(".")
                        }, o),
                    (f = l[p]) || (f = l[p] = [],
                        f.delegateCount = 0,
                    d.setup && !1 !== d.setup.call(e, r, h, a) || e.addEventListener && e.addEventListener(p, a)),
                    d.add && (d.add.call(e, u),
                    u.handler.guid || (u.handler.guid = n.guid)),
                        i ? f.splice(f.delegateCount++, 0, u) : f.push(u),
                        oe.event.global[p] = !0)
        },
        remove: function(e, t, n, r, i) {
            var o, a, s, l, c, u, d, f, p, h, m, g = Te.hasData(e) && Te.get(e);
            if (g && (l = g.events)) {
                for (t = (t || "").match(we) || [""],
                         c = t.length; c--; )
                    if (s = Pe.exec(t[c]) || [],
                            p = m = s[1],
                            h = (s[2] || "").split(".").sort(),
                            p) {
                        for (d = oe.event.special[p] || {},
                                 p = (r ? d.delegateType : d.bindType) || p,
                                 f = l[p] || [],
                                 s = s[2] && new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)"),
                                 a = o = f.length; o--; )
                            u = f[o],
                            !i && m !== u.origType || n && n.guid !== u.guid || s && !s.test(u.namespace) || r && r !== u.selector && ("**" !== r || !u.selector) || (f.splice(o, 1),
                            u.selector && f.delegateCount--,
                            d.remove && d.remove.call(e, u));
                        a && !f.length && (d.teardown && !1 !== d.teardown.call(e, h, g.handle) || oe.removeEvent(e, p, g.handle),
                            delete l[p])
                    } else
                        for (p in l)
                            oe.event.remove(e, p + t[c], n, r, !0);
                oe.isEmptyObject(l) && Te.remove(e, "handle events")
            }
        },
        dispatch: function(e) {
            e = oe.event.fix(e);
            var t, n, r, i, o, a = [], s = J.call(arguments), l = (Te.get(this, "events") || {})[e.type] || [], c = oe.event.special[e.type] || {};
            if (s[0] = e,
                    e.delegateTarget = this,
                !c.preDispatch || !1 !== c.preDispatch.call(this, e)) {
                for (a = oe.event.handlers.call(this, e, l),
                         t = 0; (i = a[t++]) && !e.isPropagationStopped(); )
                    for (e.currentTarget = i.elem,
                             n = 0; (o = i.handlers[n++]) && !e.isImmediatePropagationStopped(); )
                        e.rnamespace && !e.rnamespace.test(o.namespace) || (e.handleObj = o,
                            e.data = o.data,
                        void 0 !== (r = ((oe.event.special[o.origType] || {}).handle || o.handler).apply(i.elem, s)) && !1 === (e.result = r) && (e.preventDefault(),
                            e.stopPropagation()));
                return c.postDispatch && c.postDispatch.call(this, e),
                    e.result
            }
        },
        handlers: function(e, t) {
            var n, r, i, o, a = [], s = t.delegateCount, l = e.target;
            if (s && l.nodeType && ("click" !== e.type || isNaN(e.button) || e.button < 1))
                for (; l !== this; l = l.parentNode || this)
                    if (1 === l.nodeType && (!0 !== l.disabled || "click" !== e.type)) {
                        for (r = [],
                                 n = 0; s > n; n++)
                            o = t[n],
                                i = o.selector + " ",
                            void 0 === r[i] && (r[i] = o.needsContext ? oe(i, this).index(l) > -1 : oe.find(i, this, null , [l]).length),
                            r[i] && r.push(o);
                        r.length && a.push({
                            elem: l,
                            handlers: r
                        })
                    }
            return s < t.length && a.push({
                elem: this,
                handlers: t.slice(s)
            }),
                a
        },
        props: "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
        fixHooks: {},
        keyHooks: {
            props: "char charCode key keyCode".split(" "),
            filter: function(e, t) {
                return null == e.which && (e.which = null != t.charCode ? t.charCode : t.keyCode),
                    e
            }
        },
        mouseHooks: {
            props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
            filter: function(e, t) {
                var n, r, i, o = t.button;
                return null == e.pageX && null != t.clientX && (n = e.target.ownerDocument || G,
                    r = n.documentElement,
                    i = n.body,
                    e.pageX = t.clientX + (r && r.scrollLeft || i && i.scrollLeft || 0) - (r && r.clientLeft || i && i.clientLeft || 0),
                    e.pageY = t.clientY + (r && r.scrollTop || i && i.scrollTop || 0) - (r && r.clientTop || i && i.clientTop || 0)),
                e.which || void 0 === o || (e.which = 1 & o ? 1 : 2 & o ? 3 : 4 & o ? 2 : 0),
                    e
            }
        },
        fix: function(e) {
            if (e[oe.expando])
                return e;
            var t, n, r, i = e.type, o = e, a = this.fixHooks[i];
            for (a || (this.fixHooks[i] = a = Ie.test(i) ? this.mouseHooks : Me.test(i) ? this.keyHooks : {}),
                     r = a.props ? this.props.concat(a.props) : this.props,
                     e = new oe.Event(o),
                     t = r.length; t--; )
                n = r[t],
                    e[n] = o[n];
            return e.target || (e.target = G),
            3 === e.target.nodeType && (e.target = e.target.parentNode),
                a.filter ? a.filter(e, o) : e
        },
        special: {
            load: {
                noBubble: !0
            },
            focus: {
                trigger: function() {
                    return this !== m() && this.focus ? (this.focus(),
                        !1) : void 0
                },
                delegateType: "focusin"
            },
            blur: {
                trigger: function() {
                    return this === m() && this.blur ? (this.blur(),
                        !1) : void 0
                },
                delegateType: "focusout"
            },
            click: {
                trigger: function() {
                    return "checkbox" === this.type && this.click && oe.nodeName(this, "input") ? (this.click(),
                        !1) : void 0
                },
                _default: function(e) {
                    return oe.nodeName(e.target, "a")
                }
            },
            beforeunload: {
                postDispatch: function(e) {
                    void 0 !== e.result && e.originalEvent && (e.originalEvent.returnValue = e.result)
                }
            }
        }
    },
        oe.removeEvent = function(e, t, n) {
            e.removeEventListener && e.removeEventListener(t, n)
        }
        ,
        oe.Event = function(e, t) {
            return this instanceof oe.Event ? (e && e.type ? (this.originalEvent = e,
                this.type = e.type,
                this.isDefaultPrevented = e.defaultPrevented || void 0 === e.defaultPrevented && !1 === e.returnValue ? p : h) : this.type = e,
            t && oe.extend(this, t),
                this.timeStamp = e && e.timeStamp || oe.now(),
                void (this[oe.expando] = !0)) : new oe.Event(e,t)
        }
        ,
        oe.Event.prototype = {
            constructor: oe.Event,
            isDefaultPrevented: h,
            isPropagationStopped: h,
            isImmediatePropagationStopped: h,
            preventDefault: function() {
                var e = this.originalEvent;
                this.isDefaultPrevented = p,
                e && e.preventDefault()
            },
            stopPropagation: function() {
                var e = this.originalEvent;
                this.isPropagationStopped = p,
                e && e.stopPropagation()
            },
            stopImmediatePropagation: function() {
                var e = this.originalEvent;
                this.isImmediatePropagationStopped = p,
                e && e.stopImmediatePropagation(),
                    this.stopPropagation()
            }
        },
        oe.each({
            mouseenter: "mouseover",
            mouseleave: "mouseout",
            pointerenter: "pointerover",
            pointerleave: "pointerout"
        }, function(e, t) {
            oe.event.special[e] = {
                delegateType: t,
                bindType: t,
                handle: function(e) {
                    var n, r = this, i = e.relatedTarget, o = e.handleObj;
                    return i && (i === r || oe.contains(r, i)) || (e.type = o.origType,
                        n = o.handler.apply(this, arguments),
                        e.type = t),
                        n
                }
            }
        }),
        oe.fn.extend({
            on: function(e, t, n, r) {
                return g(this, e, t, n, r)
            },
            one: function(e, t, n, r) {
                return g(this, e, t, n, r, 1)
            },
            off: function(e, t, n) {
                var r, i;
                if (e && e.preventDefault && e.handleObj)
                    return r = e.handleObj,
                        oe(e.delegateTarget).off(r.namespace ? r.origType + "." + r.namespace : r.origType, r.selector, r.handler),
                        this;
                if ("object" == typeof e) {
                    for (i in e)
                        this.off(i, t, e[i]);
                    return this
                }
                return !1 !== t && "function" != typeof t || (n = t,
                    t = void 0),
                !1 === n && (n = h),
                    this.each(function() {
                        oe.event.remove(this, e, n, t)
                    })
            }
        });
    var He = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi
        , Be = /<script|<style|<link/i
        , Re = /checked\s*(?:[^=]|=\s*.checked.)/i
        , ze = /^true\/(.*)/
        , We = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
    oe.extend({
        htmlPrefilter: function(e) {
            return e.replace(He, "<$1></$2>")
        },
        clone: function(e, t, n) {
            var r, i, o, a, s = e.cloneNode(!0), l = oe.contains(e.ownerDocument, e);
            if (!(re.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || oe.isXMLDoc(e)))
                for (a = u(s),
                         o = u(e),
                         r = 0,
                         i = o.length; i > r; r++)
                    x(o[r], a[r]);
            if (t)
                if (n)
                    for (o = o || u(e),
                             a = a || u(s),
                             r = 0,
                             i = o.length; i > r; r++)
                        w(o[r], a[r]);
                else
                    w(e, s);
            return a = u(s, "script"),
            a.length > 0 && d(a, !l && u(e, "script")),
                s
        },
        cleanData: function(e) {
            for (var t, n, r, i = oe.event.special, o = 0; void 0 !== (n = e[o]); o++)
                if (ke(n)) {
                    if (t = n[Te.expando]) {
                        if (t.events)
                            for (r in t.events)
                                i[r] ? oe.event.remove(n, r) : oe.removeEvent(n, r, t.handle);
                        n[Te.expando] = void 0
                    }
                    n[je.expando] && (n[je.expando] = void 0)
                }
        }
    }),
        oe.fn.extend({
            domManip: C,
            detach: function(e) {
                return k(this, e, !0)
            },
            remove: function(e) {
                return k(this, e)
            },
            text: function(e) {
                return Ce(this, function(e) {
                    return void 0 === e ? oe.text(this) : this.empty().each(function() {
                        1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || (this.textContent = e)
                    })
                }, null , e, arguments.length)
            },
            append: function() {
                return C(this, arguments, function(e) {
                    if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
                        v(this, e).appendChild(e)
                    }
                })
            },
            prepend: function() {
                return C(this, arguments, function(e) {
                    if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
                        var t = v(this, e);
                        t.insertBefore(e, t.firstChild)
                    }
                })
            },
            before: function() {
                return C(this, arguments, function(e) {
                    this.parentNode && this.parentNode.insertBefore(e, this)
                })
            },
            after: function() {
                return C(this, arguments, function(e) {
                    this.parentNode && this.parentNode.insertBefore(e, this.nextSibling)
                })
            },
            empty: function() {
                for (var e, t = 0; null != (e = this[t]); t++)
                    1 === e.nodeType && (oe.cleanData(u(e, !1)),
                        e.textContent = "");
                return this
            },
            clone: function(e, t) {
                return e = null != e && e,
                    t = null == t ? e : t,
                    this.map(function() {
                        return oe.clone(this, e, t)
                    })
            },
            html: function(e) {
                return Ce(this, function(e) {
                    var t = this[0] || {}
                        , n = 0
                        , r = this.length;
                    if (void 0 === e && 1 === t.nodeType)
                        return t.innerHTML;
                    if ("string" == typeof e && !Be.test(e) && !Le[(Ne.exec(e) || ["", ""])[1].toLowerCase()]) {
                        e = oe.htmlPrefilter(e);
                        try {
                            for (; r > n; n++)
                                t = this[n] || {},
                                1 === t.nodeType && (oe.cleanData(u(t, !1)),
                                    t.innerHTML = e);
                            t = 0
                        } catch (e) {}
                    }
                    t && this.empty().append(e)
                }, null , e, arguments.length)
            },
            replaceWith: function() {
                var e = [];
                return C(this, arguments, function(t) {
                    var n = this.parentNode;
                    oe.inArray(this, e) < 0 && (oe.cleanData(u(this)),
                    n && n.replaceChild(t, this))
                }, e)
            }
        }),
        oe.each({
            appendTo: "append",
            prependTo: "prepend",
            insertBefore: "before",
            insertAfter: "after",
            replaceAll: "replaceWith"
        }, function(e, t) {
            oe.fn[e] = function(e) {
                for (var n, r = [], i = oe(e), o = i.length - 1, a = 0; o >= a; a++)
                    n = a === o ? this : this.clone(!0),
                        oe(i[a])[t](n),
                        K.apply(r, n.get());
                return this.pushStack(r)
            }
        });
    var Ue, Xe = {
        HTML: "block",
        BODY: "block"
    }, Ye = /^margin/, Ve = new RegExp("^(" + Ae + ")(?!px)[a-z%]+$","i"), Ge = function(t) {
        var n = t.ownerDocument.defaultView;
        return n && n.opener || (n = e),
            n.getComputedStyle(t)
    }, Je = function(e, t, n, r) {
        var i, o, a = {};
        for (o in t)
            a[o] = e.style[o],
                e.style[o] = t[o];
        i = n.apply(e, r || []);
        for (o in t)
            e.style[o] = a[o];
        return i
    }, Qe = G.documentElement;
    !function() {
        function t() {
            s.style.cssText = "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",
                s.innerHTML = "",
                Qe.appendChild(a);
            var t = e.getComputedStyle(s);
            n = "1%" !== t.top,
                o = "2px" === t.marginLeft,
                r = "4px" === t.width,
                s.style.marginRight = "50%",
                i = "4px" === t.marginRight,
                Qe.removeChild(a)
        }
        var n, r, i, o, a = G.createElement("div"), s = G.createElement("div");
        s.style && (s.style.backgroundClip = "content-box",
            s.cloneNode(!0).style.backgroundClip = "",
            re.clearCloneStyle = "content-box" === s.style.backgroundClip,
            a.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",
            a.appendChild(s),
            oe.extend(re, {
                pixelPosition: function() {
                    return t(),
                        n
                },
                boxSizingReliable: function() {
                    return null == r && t(),
                        r
                },
                pixelMarginRight: function() {
                    return null == r && t(),
                        i
                },
                reliableMarginLeft: function() {
                    return null == r && t(),
                        o
                },
                reliableMarginRight: function() {
                    var t, n = s.appendChild(G.createElement("div"));
                    return n.style.cssText = s.style.cssText = "-webkit-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",
                        n.style.marginRight = n.style.width = "0",
                        s.style.width = "1px",
                        Qe.appendChild(a),
                        t = !parseFloat(e.getComputedStyle(n).marginRight),
                        Qe.removeChild(a),
                        s.removeChild(n),
                        t
                }
            }))
    }();
    var Ke = /^(none|table(?!-c[ea]).+)/
        , Ze = {
        position: "absolute",
        visibility: "hidden",
        display: "block"
    }
        , et = {
        letterSpacing: "0",
        fontWeight: "400"
    }
        , tt = ["Webkit", "O", "Moz", "ms"]
        , nt = G.createElement("div").style;
    oe.extend({
        cssHooks: {
            opacity: {
                get: function(e, t) {
                    if (t) {
                        var n = $(e, "opacity");
                        return "" === n ? "1" : n
                    }
                }
            }
        },
        cssNumber: {
            animationIterationCount: !0,
            columnCount: !0,
            fillOpacity: !0,
            flexGrow: !0,
            flexShrink: !0,
            fontWeight: !0,
            lineHeight: !0,
            opacity: !0,
            order: !0,
            orphans: !0,
            widows: !0,
            zIndex: !0,
            zoom: !0
        },
        cssProps: {
            float: "cssFloat"
        },
        style: function(e, t, n, r) {
            if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) {
                var i, o, a, s = oe.camelCase(t), l = e.style;
                return t = oe.cssProps[s] || (oe.cssProps[s] = A(s) || s),
                    a = oe.cssHooks[t] || oe.cssHooks[s],
                    void 0 === n ? a && "get"in a && void 0 !== (i = a.get(e, !1, r)) ? i : l[t] : (o = typeof n,
                    "string" === o && (i = Ee.exec(n)) && i[1] && (n = c(e, t, i),
                        o = "number"),
                        void (null != n && n === n && ("number" === o && (n += i && i[3] || (oe.cssNumber[s] ? "" : "px")),
                        re.clearCloneStyle || "" !== n || 0 !== t.indexOf("background") || (l[t] = "inherit"),
                        a && "set"in a && void 0 === (n = a.set(e, n, r)) || (l[t] = n))))
            }
        },
        css: function(e, t, n, r) {
            var i, o, a, s = oe.camelCase(t);
            return t = oe.cssProps[s] || (oe.cssProps[s] = A(s) || s),
                a = oe.cssHooks[t] || oe.cssHooks[s],
            a && "get"in a && (i = a.get(e, !0, n)),
            void 0 === i && (i = $(e, t, r)),
            "normal" === i && t in et && (i = et[t]),
                "" === n || n ? (o = parseFloat(i),
                    !0 === n || isFinite(o) ? o || 0 : i) : i
        }
    }),
        oe.each(["height", "width"], function(e, t) {
            oe.cssHooks[t] = {
                get: function(e, n, r) {
                    return n ? Ke.test(oe.css(e, "display")) && 0 === e.offsetWidth ? Je(e, Ze, function() {
                        return _(e, t, r)
                    }) : _(e, t, r) : void 0
                },
                set: function(e, n, r) {
                    var i, o = r && Ge(e), a = r && D(e, t, r, "border-box" === oe.css(e, "boxSizing", !1, o), o);
                    return a && (i = Ee.exec(n)) && "px" !== (i[3] || "px") && (e.style[t] = n,
                        n = oe.css(e, t)),
                        E(e, n, a)
                }
            }
        }),
        oe.cssHooks.marginLeft = S(re.reliableMarginLeft, function(e, t) {
            return t ? (parseFloat($(e, "marginLeft")) || e.getBoundingClientRect().left - Je(e, {
                marginLeft: 0
            }, function() {
                return e.getBoundingClientRect().left
            })) + "px" : void 0
        }),
        oe.cssHooks.marginRight = S(re.reliableMarginRight, function(e, t) {
            return t ? Je(e, {
                display: "inline-block"
            }, $, [e, "marginRight"]) : void 0
        }),
        oe.each({
            margin: "",
            padding: "",
            border: "Width"
        }, function(e, t) {
            oe.cssHooks[e + t] = {
                expand: function(n) {
                    for (var r = 0, i = {}, o = "string" == typeof n ? n.split(" ") : [n]; 4 > r; r++)
                        i[e + De[r] + t] = o[r] || o[r - 2] || o[0];
                    return i
                }
            },
            Ye.test(e) || (oe.cssHooks[e + t].set = E)
        }),
        oe.fn.extend({
            css: function(e, t) {
                return Ce(this, function(e, t, n) {
                    var r, i, o = {}, a = 0;
                    if (oe.isArray(t)) {
                        for (r = Ge(e),
                                 i = t.length; i > a; a++)
                            o[t[a]] = oe.css(e, t[a], !1, r);
                        return o
                    }
                    return void 0 !== n ? oe.style(e, t, n) : oe.css(e, t)
                }, e, t, arguments.length > 1)
            },
            show: function() {
                return F(this, !0)
            },
            hide: function() {
                return F(this)
            },
            toggle: function(e) {
                return "boolean" == typeof e ? e ? this.show() : this.hide() : this.each(function() {
                    _e(this) ? oe(this).show() : oe(this).hide()
                })
            }
        }),
        oe.Tween = N,
        N.prototype = {
            constructor: N,
            init: function(e, t, n, r, i, o) {
                this.elem = e,
                    this.prop = n,
                    this.easing = i || oe.easing._default,
                    this.options = t,
                    this.start = this.now = this.cur(),
                    this.end = r,
                    this.unit = o || (oe.cssNumber[n] ? "" : "px")
            },
            cur: function() {
                var e = N.propHooks[this.prop];
                return e && e.get ? e.get(this) : N.propHooks._default.get(this)
            },
            run: function(e) {
                var t, n = N.propHooks[this.prop];
                return this.options.duration ? this.pos = t = oe.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : this.pos = t = e,
                    this.now = (this.end - this.start) * t + this.start,
                this.options.step && this.options.step.call(this.elem, this.now, this),
                    n && n.set ? n.set(this) : N.propHooks._default.set(this),
                    this
            }
        },
        N.prototype.init.prototype = N.prototype,
        N.propHooks = {
            _default: {
                get: function(e) {
                    var t;
                    return 1 !== e.elem.nodeType || null != e.elem[e.prop] && null == e.elem.style[e.prop] ? e.elem[e.prop] : (t = oe.css(e.elem, e.prop, ""),
                        t && "auto" !== t ? t : 0)
                },
                set: function(e) {
                    oe.fx.step[e.prop] ? oe.fx.step[e.prop](e) : 1 !== e.elem.nodeType || null == e.elem.style[oe.cssProps[e.prop]] && !oe.cssHooks[e.prop] ? e.elem[e.prop] = e.now : oe.style(e.elem, e.prop, e.now + e.unit)
                }
            }
        },
        N.propHooks.scrollTop = N.propHooks.scrollLeft = {
            set: function(e) {
                e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now)
            }
        },
        oe.easing = {
            linear: function(e) {
                return e
            },
            swing: function(e) {
                return .5 - Math.cos(e * Math.PI) / 2
            },
            _default: "swing"
        },
        oe.fx = N.prototype.init,
        oe.fx.step = {};
    var rt, it, ot = /^(?:toggle|show|hide)$/, at = /queueHooks$/;
    oe.Animation = oe.extend(P, {
        tweeners: {
            "*": [function(e, t) {
                var n = this.createTween(e, t);
                return c(n.elem, e, Ee.exec(t), n),
                    n
            }
            ]
        },
        tweener: function(e, t) {
            oe.isFunction(e) ? (t = e,
                e = ["*"]) : e = e.match(we);
            for (var n, r = 0, i = e.length; i > r; r++)
                n = e[r],
                    P.tweeners[n] = P.tweeners[n] || [],
                    P.tweeners[n].unshift(t)
        },
        prefilters: [M],
        prefilter: function(e, t) {
            t ? P.prefilters.unshift(e) : P.prefilters.push(e)
        }
    }),
        oe.speed = function(e, t, n) {
            var r = e && "object" == typeof e ? oe.extend({}, e) : {
                complete: n || !n && t || oe.isFunction(e) && e,
                duration: e,
                easing: n && t || t && !oe.isFunction(t) && t
            };
            return r.duration = oe.fx.off ? 0 : "number" == typeof r.duration ? r.duration : r.duration in oe.fx.speeds ? oe.fx.speeds[r.duration] : oe.fx.speeds._default,
            null != r.queue && !0 !== r.queue || (r.queue = "fx"),
                r.old = r.complete,
                r.complete = function() {
                    oe.isFunction(r.old) && r.old.call(this),
                    r.queue && oe.dequeue(this, r.queue)
                }
                ,
                r
        }
        ,
        oe.fn.extend({
            fadeTo: function(e, t, n, r) {
                return this.filter(_e).css("opacity", 0).show().end().animate({
                    opacity: t
                }, e, n, r)
            },
            animate: function(e, t, n, r) {
                var i = oe.isEmptyObject(e)
                    , o = oe.speed(t, n, r)
                    , a = function() {
                    var t = P(this, oe.extend({}, e), o);
                    (i || Te.get(this, "finish")) && t.stop(!0)
                };
                return a.finish = a,
                    i || !1 === o.queue ? this.each(a) : this.queue(o.queue, a)
            },
            stop: function(e, t, n) {
                var r = function(e) {
                    var t = e.stop;
                    delete e.stop,
                        t(n)
                };
                return "string" != typeof e && (n = t,
                    t = e,
                    e = void 0),
                t && !1 !== e && this.queue(e || "fx", []),
                    this.each(function() {
                        var t = !0
                            , i = null != e && e + "queueHooks"
                            , o = oe.timers
                            , a = Te.get(this);
                        if (i)
                            a[i] && a[i].stop && r(a[i]);
                        else
                            for (i in a)
                                a[i] && a[i].stop && at.test(i) && r(a[i]);
                        for (i = o.length; i--; )
                            o[i].elem !== this || null != e && o[i].queue !== e || (o[i].anim.stop(n),
                                t = !1,
                                o.splice(i, 1));
                        !t && n || oe.dequeue(this, e)
                    })
            },
            finish: function(e) {
                return !1 !== e && (e = e || "fx"),
                    this.each(function() {
                        var t, n = Te.get(this), r = n[e + "queue"], i = n[e + "queueHooks"], o = oe.timers, a = r ? r.length : 0;
                        for (n.finish = !0,
                                 oe.queue(this, e, []),
                             i && i.stop && i.stop.call(this, !0),
                                 t = o.length; t--; )
                            o[t].elem === this && o[t].queue === e && (o[t].anim.stop(!0),
                                o.splice(t, 1));
                        for (t = 0; a > t; t++)
                            r[t] && r[t].finish && r[t].finish.call(this);
                        delete n.finish
                    })
            }
        }),
        oe.each(["toggle", "show", "hide"], function(e, t) {
            var n = oe.fn[t];
            oe.fn[t] = function(e, r, i) {
                return null == e || "boolean" == typeof e ? n.apply(this, arguments) : this.animate(L(t, !0), e, r, i)
            }
        }),
        oe.each({
            slideDown: L("show"),
            slideUp: L("hide"),
            slideToggle: L("toggle"),
            fadeIn: {
                opacity: "show"
            },
            fadeOut: {
                opacity: "hide"
            },
            fadeToggle: {
                opacity: "toggle"
            }
        }, function(e, t) {
            oe.fn[e] = function(e, n, r) {
                return this.animate(t, e, n, r)
            }
        }),
        oe.timers = [],
        oe.fx.tick = function() {
            var e, t = 0, n = oe.timers;
            for (rt = oe.now(); t < n.length; t++)
                (e = n[t])() || n[t] !== e || n.splice(t--, 1);
            n.length || oe.fx.stop(),
                rt = void 0
        }
        ,
        oe.fx.timer = function(e) {
            oe.timers.push(e),
                e() ? oe.fx.start() : oe.timers.pop()
        }
        ,
        oe.fx.interval = 13,
        oe.fx.start = function() {
            it || (it = e.setInterval(oe.fx.tick, oe.fx.interval))
        }
        ,
        oe.fx.stop = function() {
            e.clearInterval(it),
                it = null
        }
        ,
        oe.fx.speeds = {
            slow: 600,
            fast: 200,
            _default: 400
        },
        oe.fn.delay = function(t, n) {
            return t = oe.fx ? oe.fx.speeds[t] || t : t,
                n = n || "fx",
                this.queue(n, function(n, r) {
                    var i = e.setTimeout(n, t);
                    r.stop = function() {
                        e.clearTimeout(i)
                    }
                })
        }
        ,
        function() {
            var e = G.createElement("input")
                , t = G.createElement("select")
                , n = t.appendChild(G.createElement("option"));
            e.type = "checkbox",
                re.checkOn = "" !== e.value,
                re.optSelected = n.selected,
                t.disabled = !0,
                re.optDisabled = !n.disabled,
                e = G.createElement("input"),
                e.value = "t",
                e.type = "radio",
                re.radioValue = "t" === e.value
        }();
    var st, lt = oe.expr.attrHandle;
    oe.fn.extend({
        attr: function(e, t) {
            return Ce(this, oe.attr, e, t, arguments.length > 1)
        },
        removeAttr: function(e) {
            return this.each(function() {
                oe.removeAttr(this, e)
            })
        }
    }),
        oe.extend({
            attr: function(e, t, n) {
                var r, i, o = e.nodeType;
                if (3 !== o && 8 !== o && 2 !== o)
                    return void 0 === e.getAttribute ? oe.prop(e, t, n) : (1 === o && oe.isXMLDoc(e) || (t = t.toLowerCase(),
                        i = oe.attrHooks[t] || (oe.expr.match.bool.test(t) ? st : void 0)),
                        void 0 !== n ? null === n ? void oe.removeAttr(e, t) : i && "set"in i && void 0 !== (r = i.set(e, n, t)) ? r : (e.setAttribute(t, n + ""),
                            n) : i && "get"in i && null !== (r = i.get(e, t)) ? r : (r = oe.find.attr(e, t),
                            null == r ? void 0 : r))
            },
            attrHooks: {
                type: {
                    set: function(e, t) {
                        if (!re.radioValue && "radio" === t && oe.nodeName(e, "input")) {
                            var n = e.value;
                            return e.setAttribute("type", t),
                            n && (e.value = n),
                                t
                        }
                    }
                }
            },
            removeAttr: function(e, t) {
                var n, r, i = 0, o = t && t.match(we);
                if (o && 1 === e.nodeType)
                    for (; n = o[i++]; )
                        r = oe.propFix[n] || n,
                        oe.expr.match.bool.test(n) && (e[r] = !1),
                            e.removeAttribute(n)
            }
        }),
        st = {
            set: function(e, t, n) {
                return !1 === t ? oe.removeAttr(e, n) : e.setAttribute(n, n),
                    n
            }
        },
        oe.each(oe.expr.match.bool.source.match(/\w+/g), function(e, t) {
            var n = lt[t] || oe.find.attr;
            lt[t] = function(e, t, r) {
                var i, o;
                return r || (o = lt[t],
                    lt[t] = i,
                    i = null != n(e, t, r) ? t.toLowerCase() : null ,
                    lt[t] = o),
                    i
            }
        });
    var ct = /^(?:input|select|textarea|button)$/i
        , ut = /^(?:a|area)$/i;
    oe.fn.extend({
        prop: function(e, t) {
            return Ce(this, oe.prop, e, t, arguments.length > 1)
        },
        removeProp: function(e) {
            return this.each(function() {
                delete this[oe.propFix[e] || e]
            })
        }
    }),
        oe.extend({
            prop: function(e, t, n) {
                var r, i, o = e.nodeType;
                if (3 !== o && 8 !== o && 2 !== o)
                    return 1 === o && oe.isXMLDoc(e) || (t = oe.propFix[t] || t,
                        i = oe.propHooks[t]),
                        void 0 !== n ? i && "set"in i && void 0 !== (r = i.set(e, n, t)) ? r : e[t] = n : i && "get"in i && null !== (r = i.get(e, t)) ? r : e[t]
            },
            propHooks: {
                tabIndex: {
                    get: function(e) {
                        var t = oe.find.attr(e, "tabindex");
                        return t ? parseInt(t, 10) : ct.test(e.nodeName) || ut.test(e.nodeName) && e.href ? 0 : -1
                    }
                }
            },
            propFix: {
                for: "htmlFor",
                class: "className"
            }
        }),
    re.optSelected || (oe.propHooks.selected = {
        get: function(e) {
            var t = e.parentNode;
            return t && t.parentNode && t.parentNode.selectedIndex,
                null
        },
        set: function(e) {
            var t = e.parentNode;
            t && (t.selectedIndex,
            t.parentNode && t.parentNode.selectedIndex)
        }
    }),
        oe.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function() {
            oe.propFix[this.toLowerCase()] = this
        });
    var dt = /[\t\r\n\f]/g;
    oe.fn.extend({
        addClass: function(e) {
            var t, n, r, i, o, a, s, l = 0;
            if (oe.isFunction(e))
                return this.each(function(t) {
                    oe(this).addClass(e.call(this, t, H(this)))
                });
            if ("string" == typeof e && e)
                for (t = e.match(we) || []; n = this[l++]; )
                    if (i = H(n),
                            r = 1 === n.nodeType && (" " + i + " ").replace(dt, " ")) {
                        for (a = 0; o = t[a++]; )
                            r.indexOf(" " + o + " ") < 0 && (r += o + " ");
                        s = oe.trim(r),
                        i !== s && n.setAttribute("class", s)
                    }
            return this
        },
        removeClass: function(e) {
            var t, n, r, i, o, a, s, l = 0;
            if (oe.isFunction(e))
                return this.each(function(t) {
                    oe(this).removeClass(e.call(this, t, H(this)))
                });
            if (!arguments.length)
                return this.attr("class", "");
            if ("string" == typeof e && e)
                for (t = e.match(we) || []; n = this[l++]; )
                    if (i = H(n),
                            r = 1 === n.nodeType && (" " + i + " ").replace(dt, " ")) {
                        for (a = 0; o = t[a++]; )
                            for (; r.indexOf(" " + o + " ") > -1; )
                                r = r.replace(" " + o + " ", " ");
                        s = oe.trim(r),
                        i !== s && n.setAttribute("class", s)
                    }
            return this
        },
        toggleClass: function(e, t) {
            var n = typeof e;
            return "boolean" == typeof t && "string" === n ? t ? this.addClass(e) : this.removeClass(e) : oe.isFunction(e) ? this.each(function(n) {
                oe(this).toggleClass(e.call(this, n, H(this), t), t)
            }) : this.each(function() {
                var t, r, i, o;
                if ("string" === n)
                    for (r = 0,
                             i = oe(this),
                             o = e.match(we) || []; t = o[r++]; )
                        i.hasClass(t) ? i.removeClass(t) : i.addClass(t);
                else
                    void 0 !== e && "boolean" !== n || (t = H(this),
                    t && Te.set(this, "__className__", t),
                    this.setAttribute && this.setAttribute("class", t || !1 === e ? "" : Te.get(this, "__className__") || ""))
            })
        },
        hasClass: function(e) {
            var t, n, r = 0;
            for (t = " " + e + " "; n = this[r++]; )
                if (1 === n.nodeType && (" " + H(n) + " ").replace(dt, " ").indexOf(t) > -1)
                    return !0;
            return !1
        }
    });
    var ft = /\r/g
        , pt = /[\x20\t\r\n\f]+/g;
    oe.fn.extend({
        val: function(e) {
            var t, n, r, i = this[0];
            return arguments.length ? (r = oe.isFunction(e),
                this.each(function(n) {
                    var i;
                    1 === this.nodeType && (i = r ? e.call(this, n, oe(this).val()) : e,
                        null == i ? i = "" : "number" == typeof i ? i += "" : oe.isArray(i) && (i = oe.map(i, function(e) {
                            return null == e ? "" : e + ""
                        })),
                    (t = oe.valHooks[this.type] || oe.valHooks[this.nodeName.toLowerCase()]) && "set"in t && void 0 !== t.set(this, i, "value") || (this.value = i))
                })) : i ? (t = oe.valHooks[i.type] || oe.valHooks[i.nodeName.toLowerCase()],
                t && "get"in t && void 0 !== (n = t.get(i, "value")) ? n : (n = i.value,
                    "string" == typeof n ? n.replace(ft, "") : null == n ? "" : n)) : void 0
        }
    }),
        oe.extend({
            valHooks: {
                option: {
                    get: function(e) {
                        var t = oe.find.attr(e, "value");
                        return null != t ? t : oe.trim(oe.text(e)).replace(pt, " ")
                    }
                },
                select: {
                    get: function(e) {
                        for (var t, n, r = e.options, i = e.selectedIndex, o = "select-one" === e.type || 0 > i, a = o ? null : [], s = o ? i + 1 : r.length, l = 0 > i ? s : o ? i : 0; s > l; l++)
                            if (n = r[l],
                                (n.selected || l === i) && (re.optDisabled ? !n.disabled : null === n.getAttribute("disabled")) && (!n.parentNode.disabled || !oe.nodeName(n.parentNode, "optgroup"))) {
                                if (t = oe(n).val(),
                                        o)
                                    return t;
                                a.push(t)
                            }
                        return a
                    },
                    set: function(e, t) {
                        for (var n, r, i = e.options, o = oe.makeArray(t), a = i.length; a--; )
                            r = i[a],
                            (r.selected = oe.inArray(oe.valHooks.option.get(r), o) > -1) && (n = !0);
                        return n || (e.selectedIndex = -1),
                            o
                    }
                }
            }
        }),
        oe.each(["radio", "checkbox"], function() {
            oe.valHooks[this] = {
                set: function(e, t) {
                    return oe.isArray(t) ? e.checked = oe.inArray(oe(e).val(), t) > -1 : void 0
                }
            },
            re.checkOn || (oe.valHooks[this].get = function(e) {
                    return null === e.getAttribute("value") ? "on" : e.value
                }
            )
        });
    var ht = /^(?:focusinfocus|focusoutblur)$/;
    oe.extend(oe.event, {
        trigger: function(t, n, r, i) {
            var o, a, s, l, c, u, d, f = [r || G], p = ne.call(t, "type") ? t.type : t, h = ne.call(t, "namespace") ? t.namespace.split(".") : [];
            if (a = s = r = r || G,
                3 !== r.nodeType && 8 !== r.nodeType && !ht.test(p + oe.event.triggered) && (p.indexOf(".") > -1 && (h = p.split("."),
                    p = h.shift(),
                    h.sort()),
                    c = p.indexOf(":") < 0 && "on" + p,
                    t = t[oe.expando] ? t : new oe.Event(p,"object" == typeof t && t),
                    t.isTrigger = i ? 2 : 3,
                    t.namespace = h.join("."),
                    t.rnamespace = t.namespace ? new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)") : null ,
                    t.result = void 0,
                t.target || (t.target = r),
                    n = null == n ? [t] : oe.makeArray(n, [t]),
                    d = oe.event.special[p] || {},
                i || !d.trigger || !1 !== d.trigger.apply(r, n))) {
                if (!i && !d.noBubble && !oe.isWindow(r)) {
                    for (l = d.delegateType || p,
                         ht.test(l + p) || (a = a.parentNode); a; a = a.parentNode)
                        f.push(a),
                            s = a;
                    s === (r.ownerDocument || G) && f.push(s.defaultView || s.parentWindow || e)
                }
                for (o = 0; (a = f[o++]) && !t.isPropagationStopped(); )
                    t.type = o > 1 ? l : d.bindType || p,
                        u = (Te.get(a, "events") || {})[t.type] && Te.get(a, "handle"),
                    u && u.apply(a, n),
                    (u = c && a[c]) && u.apply && ke(a) && (t.result = u.apply(a, n),
                    !1 === t.result && t.preventDefault());
                return t.type = p,
                i || t.isDefaultPrevented() || d._default && !1 !== d._default.apply(f.pop(), n) || !ke(r) || c && oe.isFunction(r[p]) && !oe.isWindow(r) && (s = r[c],
                s && (r[c] = null ),
                    oe.event.triggered = p,
                    r[p](),
                    oe.event.triggered = void 0,
                s && (r[c] = s)),
                    t.result
            }
        },
        simulate: function(e, t, n) {
            var r = oe.extend(new oe.Event, n, {
                type: e,
                isSimulated: !0
            });
            oe.event.trigger(r, null , t),
            r.isDefaultPrevented() && n.preventDefault()
        }
    }),
        oe.fn.extend({
            trigger: function(e, t) {
                return this.each(function() {
                    oe.event.trigger(e, t, this)
                })
            },
            triggerHandler: function(e, t) {
                var n = this[0];
                return n ? oe.event.trigger(e, t, n, !0) : void 0
            }
        }),
        oe.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function(e, t) {
            oe.fn[t] = function(e, n) {
                return arguments.length > 0 ? this.on(t, null , e, n) : this.trigger(t)
            }
        }),
        oe.fn.extend({
            hover: function(e, t) {
                return this.mouseenter(e).mouseleave(t || e)
            }
        }),
        re.focusin = "onfocusin"in e,
    re.focusin || oe.each({
        focus: "focusin",
        blur: "focusout"
    }, function(e, t) {
        var n = function(e) {
            oe.event.simulate(t, e.target, oe.event.fix(e))
        };
        oe.event.special[t] = {
            setup: function() {
                var r = this.ownerDocument || this
                    , i = Te.access(r, t);
                i || r.addEventListener(e, n, !0),
                    Te.access(r, t, (i || 0) + 1)
            },
            teardown: function() {
                var r = this.ownerDocument || this
                    , i = Te.access(r, t) - 1;
                i ? Te.access(r, t, i) : (r.removeEventListener(e, n, !0),
                    Te.remove(r, t))
            }
        }
    });
    var mt = e.location
        , gt = oe.now()
        , vt = /\?/;
    oe.parseJSON = function(e) {
        return JSON.parse(e + "")
    }
        ,
        oe.parseXML = function(t) {
            var n;
            if (!t || "string" != typeof t)
                return null ;
            try {
                n = (new e.DOMParser).parseFromString(t, "text/xml")
            } catch (e) {
                n = void 0
            }
            return n && !n.getElementsByTagName("parsererror").length || oe.error("Invalid XML: " + t),
                n
        }
    ;
    var yt = /#.*$/
        , bt = /([?&])_=[^&]*/
        , wt = /^(.*?):[ \t]*([^\r\n]*)$/gm
        , xt = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/
        , Ct = /^(?:GET|HEAD)$/
        , kt = /^\/\//
        , Tt = {}
        , jt = {}
        , $t = "*/".concat("*")
        , St = G.createElement("a");
    St.href = mt.href,
        oe.extend({
            active: 0,
            lastModified: {},
            etag: {},
            ajaxSettings: {
                url: mt.href,
                type: "GET",
                isLocal: xt.test(mt.protocol),
                global: !0,
                processData: !0,
                async: !0,
                contentType: "application/x-www-form-urlencoded; charset=UTF-8",
                accepts: {
                    "*": $t,
                    text: "text/plain",
                    html: "text/html",
                    xml: "application/xml, text/xml",
                    json: "application/json, text/javascript"
                },
                contents: {
                    xml: /\bxml\b/,
                    html: /\bhtml/,
                    json: /\bjson\b/
                },
                responseFields: {
                    xml: "responseXML",
                    text: "responseText",
                    json: "responseJSON"
                },
                converters: {
                    "* text": String,
                    "text html": !0,
                    "text json": oe.parseJSON,
                    "text xml": oe.parseXML
                },
                flatOptions: {
                    url: !0,
                    context: !0
                }
            },
            ajaxSetup: function(e, t) {
                return t ? z(z(e, oe.ajaxSettings), t) : z(oe.ajaxSettings, e)
            },
            ajaxPrefilter: B(Tt),
            ajaxTransport: B(jt),
            ajax: function(t, n) {
                function r(t, n, r, s) {
                    var c, d, y, b, x, k = n;
                    2 !== w && (w = 2,
                    l && e.clearTimeout(l),
                        i = void 0,
                        a = s || "",
                        C.readyState = t > 0 ? 4 : 0,
                        c = t >= 200 && 300 > t || 304 === t,
                    r && (b = W(f, C, r)),
                        b = U(f, b, C, c),
                        c ? (f.ifModified && (x = C.getResponseHeader("Last-Modified"),
                        x && (oe.lastModified[o] = x),
                        (x = C.getResponseHeader("etag")) && (oe.etag[o] = x)),
                            204 === t || "HEAD" === f.type ? k = "nocontent" : 304 === t ? k = "notmodified" : (k = b.state,
                                d = b.data,
                                y = b.error,
                                c = !y)) : (y = k,
                        !t && k || (k = "error",
                        0 > t && (t = 0))),
                        C.status = t,
                        C.statusText = (n || k) + "",
                        c ? m.resolveWith(p, [d, k, C]) : m.rejectWith(p, [C, k, y]),
                        C.statusCode(v),
                        v = void 0,
                    u && h.trigger(c ? "ajaxSuccess" : "ajaxError", [C, f, c ? d : y]),
                        g.fireWith(p, [C, k]),
                    u && (h.trigger("ajaxComplete", [C, f]),
                    --oe.active || oe.event.trigger("ajaxStop")))
                }
                "object" == typeof t && (n = t,
                    t = void 0),
                    n = n || {};
                var i, o, a, s, l, c, u, d, f = oe.ajaxSetup({}, n), p = f.context || f, h = f.context && (p.nodeType || p.jquery) ? oe(p) : oe.event, m = oe.Deferred(), g = oe.Callbacks("once memory"), v = f.statusCode || {}, y = {}, b = {}, w = 0, x = "canceled", C = {
                    readyState: 0,
                    getResponseHeader: function(e) {
                        var t;
                        if (2 === w) {
                            if (!s)
                                for (s = {}; t = wt.exec(a); )
                                    s[t[1].toLowerCase()] = t[2];
                            t = s[e.toLowerCase()]
                        }
                        return null == t ? null : t
                    },
                    getAllResponseHeaders: function() {
                        return 2 === w ? a : null
                    },
                    setRequestHeader: function(e, t) {
                        var n = e.toLowerCase();
                        return w || (e = b[n] = b[n] || e,
                            y[e] = t),
                            this
                    },
                    overrideMimeType: function(e) {
                        return w || (f.mimeType = e),
                            this
                    },
                    statusCode: function(e) {
                        var t;
                        if (e)
                            if (2 > w)
                                for (t in e)
                                    v[t] = [v[t], e[t]];
                            else
                                C.always(e[C.status]);
                        return this
                    },
                    abort: function(e) {
                        var t = e || x;
                        return i && i.abort(t),
                            r(0, t),
                            this
                    }
                };
                if (m.promise(C).complete = g.add,
                        C.success = C.done,
                        C.error = C.fail,
                        f.url = ((t || f.url || mt.href) + "").replace(yt, "").replace(kt, mt.protocol + "//"),
                        f.type = n.method || n.type || f.method || f.type,
                        f.dataTypes = oe.trim(f.dataType || "*").toLowerCase().match(we) || [""],
                    null == f.crossDomain) {
                    c = G.createElement("a");
                    try {
                        c.href = f.url,
                            c.href = c.href,
                            f.crossDomain = St.protocol + "//" + St.host != c.protocol + "//" + c.host
                    } catch (e) {
                        f.crossDomain = !0
                    }
                }
                if (f.data && f.processData && "string" != typeof f.data && (f.data = oe.param(f.data, f.traditional)),
                        R(Tt, f, n, C),
                    2 === w)
                    return C;
                u = oe.event && f.global,
                u && 0 == oe.active++ && oe.event.trigger("ajaxStart"),
                    f.type = f.type.toUpperCase(),
                    f.hasContent = !Ct.test(f.type),
                    o = f.url,
                f.hasContent || (f.data && (o = f.url += (vt.test(o) ? "&" : "?") + f.data,
                    delete f.data),
                !1 === f.cache && (f.url = bt.test(o) ? o.replace(bt, "$1_=" + gt++) : o + (vt.test(o) ? "&" : "?") + "_=" + gt++)),
                f.ifModified && (oe.lastModified[o] && C.setRequestHeader("If-Modified-Since", oe.lastModified[o]),
                oe.etag[o] && C.setRequestHeader("If-None-Match", oe.etag[o])),
                (f.data && f.hasContent && !1 !== f.contentType || n.contentType) && C.setRequestHeader("Content-Type", f.contentType),
                    C.setRequestHeader("Accept", f.dataTypes[0] && f.accepts[f.dataTypes[0]] ? f.accepts[f.dataTypes[0]] + ("*" !== f.dataTypes[0] ? ", " + $t + "; q=0.01" : "") : f.accepts["*"]);
                for (d in f.headers)
                    C.setRequestHeader(d, f.headers[d]);
                if (f.beforeSend && (!1 === f.beforeSend.call(p, C, f) || 2 === w))
                    return C.abort();
                x = "abort";
                for (d in {
                    success: 1,
                    error: 1,
                    complete: 1
                })
                    C[d](f[d]);
                if (i = R(jt, f, n, C)) {
                    if (C.readyState = 1,
                        u && h.trigger("ajaxSend", [C, f]),
                        2 === w)
                        return C;
                    f.async && f.timeout > 0 && (l = e.setTimeout(function() {
                        C.abort("timeout")
                    }, f.timeout));
                    try {
                        w = 1,
                            i.send(y, r)
                    } catch (e) {
                        if (!(2 > w))
                            throw e;
                        r(-1, e)
                    }
                } else
                    r(-1, "No Transport");
                return C
            },
            getJSON: function(e, t, n) {
                return oe.get(e, t, n, "json")
            },
            getScript: function(e, t) {
                return oe.get(e, void 0, t, "script")
            }
        }),
        oe.each(["get", "post"], function(e, t) {
            oe[t] = function(e, n, r, i) {
                return oe.isFunction(n) && (i = i || r,
                    r = n,
                    n = void 0),
                    oe.ajax(oe.extend({
                        url: e,
                        type: t,
                        dataType: i,
                        data: n,
                        success: r
                    }, oe.isPlainObject(e) && e))
            }
        }),
        oe._evalUrl = function(e) {
            return oe.ajax({
                url: e,
                type: "GET",
                dataType: "script",
                async: !1,
                global: !1,
                throws: !0
            })
        }
        ,
        oe.fn.extend({
            wrapAll: function(e) {
                var t;
                return oe.isFunction(e) ? this.each(function(t) {
                    oe(this).wrapAll(e.call(this, t))
                }) : (this[0] && (t = oe(e, this[0].ownerDocument).eq(0).clone(!0),
                this[0].parentNode && t.insertBefore(this[0]),
                    t.map(function() {
                        for (var e = this; e.firstElementChild; )
                            e = e.firstElementChild;
                        return e
                    }).append(this)),
                    this)
            },
            wrapInner: function(e) {
                return oe.isFunction(e) ? this.each(function(t) {
                    oe(this).wrapInner(e.call(this, t))
                }) : this.each(function() {
                    var t = oe(this)
                        , n = t.contents();
                    n.length ? n.wrapAll(e) : t.append(e)
                })
            },
            wrap: function(e) {
                var t = oe.isFunction(e);
                return this.each(function(n) {
                    oe(this).wrapAll(t ? e.call(this, n) : e)
                })
            },
            unwrap: function() {
                return this.parent().each(function() {
                    oe.nodeName(this, "body") || oe(this).replaceWith(this.childNodes)
                }).end()
            }
        }),
        oe.expr.filters.hidden = function(e) {
            return !oe.expr.filters.visible(e)
        }
        ,
        oe.expr.filters.visible = function(e) {
            return e.offsetWidth > 0 || e.offsetHeight > 0 || e.getClientRects().length > 0
        }
    ;
    var At = /%20/g
        , Et = /\[\]$/
        , Dt = /\r?\n/g
        , _t = /^(?:submit|button|image|reset|file)$/i
        , Ft = /^(?:input|select|textarea|keygen)/i;
    oe.param = function(e, t) {
        var n, r = [], i = function(e, t) {
            t = oe.isFunction(t) ? t() : null == t ? "" : t,
                r[r.length] = encodeURIComponent(e) + "=" + encodeURIComponent(t)
        };
        if (void 0 === t && (t = oe.ajaxSettings && oe.ajaxSettings.traditional),
            oe.isArray(e) || e.jquery && !oe.isPlainObject(e))
            oe.each(e, function() {
                i(this.name, this.value)
            });
        else
            for (n in e)
                X(n, e[n], t, i);
        return r.join("&").replace(At, "+")
    }
        ,
        oe.fn.extend({
            serialize: function() {
                return oe.param(this.serializeArray())
            },
            serializeArray: function() {
                return this.map(function() {
                    var e = oe.prop(this, "elements");
                    return e ? oe.makeArray(e) : this
                }).filter(function() {
                    var e = this.type;
                    return this.name && !oe(this).is(":disabled") && Ft.test(this.nodeName) && !_t.test(e) && (this.checked || !Fe.test(e))
                }).map(function(e, t) {
                    var n = oe(this).val();
                    return null == n ? null : oe.isArray(n) ? oe.map(n, function(e) {
                        return {
                            name: t.name,
                            value: e.replace(Dt, "\r\n")
                        }
                    }) : {
                        name: t.name,
                        value: n.replace(Dt, "\r\n")
                    }
                }).get()
            }
        }),
        oe.ajaxSettings.xhr = function() {
            try {
                return new e.XMLHttpRequest
            } catch (e) {}
        }
    ;
    var Nt = {
        0: 200,
        1223: 204
    }
        , Ot = oe.ajaxSettings.xhr();
    re.cors = !!Ot && "withCredentials"in Ot,
        re.ajax = Ot = !!Ot,
        oe.ajaxTransport(function(t) {
            var n, r;
            return re.cors || Ot && !t.crossDomain ? {
                send: function(i, o) {
                    var a, s = t.xhr();
                    if (s.open(t.type, t.url, t.async, t.username, t.password),
                            t.xhrFields)
                        for (a in t.xhrFields)
                            s[a] = t.xhrFields[a];
                    t.mimeType && s.overrideMimeType && s.overrideMimeType(t.mimeType),
                    t.crossDomain || i["X-Requested-With"] || (i["X-Requested-With"] = "XMLHttpRequest");
                    for (a in i)
                        s.setRequestHeader(a, i[a]);
                    n = function(e) {
                        return function() {
                            n && (n = r = s.onload = s.onerror = s.onabort = s.onreadystatechange = null ,
                                "abort" === e ? s.abort() : "error" === e ? "number" != typeof s.status ? o(0, "error") : o(s.status, s.statusText) : o(Nt[s.status] || s.status, s.statusText, "text" !== (s.responseType || "text") || "string" != typeof s.responseText ? {
                                    binary: s.response
                                } : {
                                    text: s.responseText
                                }, s.getAllResponseHeaders()))
                        }
                    }
                        ,
                        s.onload = n(),
                        r = s.onerror = n("error"),
                        void 0 !== s.onabort ? s.onabort = r : s.onreadystatechange = function() {
                            4 === s.readyState && e.setTimeout(function() {
                                n && r()
                            })
                        }
                        ,
                        n = n("abort");
                    try {
                        s.send(t.hasContent && t.data || null )
                    } catch (e) {
                        if (n)
                            throw e
                    }
                },
                abort: function() {
                    n && n()
                }
            } : void 0
        }),
        oe.ajaxSetup({
            accepts: {
                script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
            },
            contents: {
                script: /\b(?:java|ecma)script\b/
            },
            converters: {
                "text script": function(e) {
                    return oe.globalEval(e),
                        e
                }
            }
        }),
        oe.ajaxPrefilter("script", function(e) {
            void 0 === e.cache && (e.cache = !1),
            e.crossDomain && (e.type = "GET")
        }),
        oe.ajaxTransport("script", function(e) {
            if (e.crossDomain) {
                var t, n;
                return {
                    send: function(r, i) {
                        t = oe("<script>").prop({
                            charset: e.scriptCharset,
                            src: e.url
                        }).on("load error", n = function(e) {
                                t.remove(),
                                    n = null ,
                                e && i("error" === e.type ? 404 : 200, e.type)
                            }
                        ),
                            G.head.appendChild(t[0])
                    },
                    abort: function() {
                        n && n()
                    }
                }
            }
        });
    var Lt = []
        , qt = /(=)\?(?=&|$)|\?\?/;
    oe.ajaxSetup({
        jsonp: "callback",
        jsonpCallback: function() {
            var e = Lt.pop() || oe.expando + "_" + gt++;
            return this[e] = !0,
                e
        }
    }),
        oe.ajaxPrefilter("json jsonp", function(t, n, r) {
            var i, o, a, s = !1 !== t.jsonp && (qt.test(t.url) ? "url" : "string" == typeof t.data && 0 === (t.contentType || "").indexOf("application/x-www-form-urlencoded") && qt.test(t.data) && "data");
            return s || "jsonp" === t.dataTypes[0] ? (i = t.jsonpCallback = oe.isFunction(t.jsonpCallback) ? t.jsonpCallback() : t.jsonpCallback,
                s ? t[s] = t[s].replace(qt, "$1" + i) : !1 !== t.jsonp && (t.url += (vt.test(t.url) ? "&" : "?") + t.jsonp + "=" + i),
                t.converters["script json"] = function() {
                    return a || oe.error(i + " was not called"),
                        a[0]
                }
                ,
                t.dataTypes[0] = "json",
                o = e[i],
                e[i] = function() {
                    a = arguments
                }
                ,
                r.always(function() {
                    void 0 === o ? oe(e).removeProp(i) : e[i] = o,
                    t[i] && (t.jsonpCallback = n.jsonpCallback,
                        Lt.push(i)),
                    a && oe.isFunction(o) && o(a[0]),
                        a = o = void 0
                }),
                "script") : void 0
        }),
        oe.parseHTML = function(e, t, n) {
            if (!e || "string" != typeof e)
                return null ;
            "boolean" == typeof t && (n = t,
                t = !1),
                t = t || G;
            var r = he.exec(e)
                , i = !n && [];
            return r ? [t.createElement(r[1])] : (r = f([e], t, i),
            i && i.length && oe(i).remove(),
                oe.merge([], r.childNodes))
        }
    ;
    var Mt = oe.fn.load;
    oe.fn.load = function(e, t, n) {
        if ("string" != typeof e && Mt)
            return Mt.apply(this, arguments);
        var r, i, o, a = this, s = e.indexOf(" ");
        return s > -1 && (r = oe.trim(e.slice(s)),
            e = e.slice(0, s)),
            oe.isFunction(t) ? (n = t,
                t = void 0) : t && "object" == typeof t && (i = "POST"),
        a.length > 0 && oe.ajax({
            url: e,
            type: i || "GET",
            dataType: "html",
            data: t
        }).done(function(e) {
            o = arguments,
                a.html(r ? oe("<div>").append(oe.parseHTML(e)).find(r) : e)
        }).always(n && function(e, t) {
            a.each(function() {
                n.apply(a, o || [e.responseText, t, e])
            })
        }
        ),
            this
    }
        ,
        oe.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function(e, t) {
            oe.fn[t] = function(e) {
                return this.on(t, e)
            }
        }),
        oe.expr.filters.animated = function(e) {
            return oe.grep(oe.timers, function(t) {
                return e === t.elem
            }).length
        }
        ,
        oe.offset = {
            setOffset: function(e, t, n) {
                var r, i, o, a, s, l, c, u = oe.css(e, "position"), d = oe(e), f = {};
                "static" === u && (e.style.position = "relative"),
                    s = d.offset(),
                    o = oe.css(e, "top"),
                    l = oe.css(e, "left"),
                    c = ("absolute" === u || "fixed" === u) && (o + l).indexOf("auto") > -1,
                    c ? (r = d.position(),
                        a = r.top,
                        i = r.left) : (a = parseFloat(o) || 0,
                        i = parseFloat(l) || 0),
                oe.isFunction(t) && (t = t.call(e, n, oe.extend({}, s))),
                null != t.top && (f.top = t.top - s.top + a),
                null != t.left && (f.left = t.left - s.left + i),
                    "using"in t ? t.using.call(e, f) : d.css(f)
            }
        },
        oe.fn.extend({
            offset: function(e) {
                if (arguments.length)
                    return void 0 === e ? this : this.each(function(t) {
                        oe.offset.setOffset(this, e, t)
                    });
                var t, n, r = this[0], i = {
                    top: 0,
                    left: 0
                }, o = r && r.ownerDocument;
                return o ? (t = o.documentElement,
                    oe.contains(t, r) ? (i = r.getBoundingClientRect(),
                        n = Y(o),
                        {
                            top: i.top + n.pageYOffset - t.clientTop,
                            left: i.left + n.pageXOffset - t.clientLeft
                        }) : i) : void 0
            },
            position: function() {
                if (this[0]) {
                    var e, t, n = this[0], r = {
                        top: 0,
                        left: 0
                    };
                    return "fixed" === oe.css(n, "position") ? t = n.getBoundingClientRect() : (e = this.offsetParent(),
                        t = this.offset(),
                    oe.nodeName(e[0], "html") || (r = e.offset()),
                        r.top += oe.css(e[0], "borderTopWidth", !0),
                        r.left += oe.css(e[0], "borderLeftWidth", !0)),
                        {
                            top: t.top - r.top - oe.css(n, "marginTop", !0),
                            left: t.left - r.left - oe.css(n, "marginLeft", !0)
                        }
                }
            },
            offsetParent: function() {
                return this.map(function() {
                    for (var e = this.offsetParent; e && "static" === oe.css(e, "position"); )
                        e = e.offsetParent;
                    return e || Qe
                })
            }
        }),
        oe.each({
            scrollLeft: "pageXOffset",
            scrollTop: "pageYOffset"
        }, function(e, t) {
            var n = "pageYOffset" === t;
            oe.fn[e] = function(r) {
                return Ce(this, function(e, r, i) {
                    var o = Y(e);
                    return void 0 === i ? o ? o[t] : e[r] : void (o ? o.scrollTo(n ? o.pageXOffset : i, n ? i : o.pageYOffset) : e[r] = i)
                }, e, r, arguments.length)
            }
        }),
        oe.each(["top", "left"], function(e, t) {
            oe.cssHooks[t] = S(re.pixelPosition, function(e, n) {
                return n ? (n = $(e, t),
                    Ve.test(n) ? oe(e).position()[t] + "px" : n) : void 0
            })
        }),
        oe.each({
            Height: "height",
            Width: "width"
        }, function(e, t) {
            oe.each({
                padding: "inner" + e,
                content: t,
                "": "outer" + e
            }, function(n, r) {
                oe.fn[r] = function(r, i) {
                    var o = arguments.length && (n || "boolean" != typeof r)
                        , a = n || (!0 === r || !0 === i ? "margin" : "border");
                    return Ce(this, function(t, n, r) {
                        var i;
                        return oe.isWindow(t) ? t.document.documentElement["client" + e] : 9 === t.nodeType ? (i = t.documentElement,
                            Math.max(t.body["scroll" + e], i["scroll" + e], t.body["offset" + e], i["offset" + e], i["client" + e])) : void 0 === r ? oe.css(t, n, a) : oe.style(t, n, r, a)
                    }, t, o ? r : void 0, o, null )
                }
            })
        }),
        oe.fn.extend({
            bind: function(e, t, n) {
                return this.on(e, null , t, n)
            },
            unbind: function(e, t) {
                return this.off(e, null , t)
            },
            delegate: function(e, t, n, r) {
                return this.on(t, e, n, r)
            },
            undelegate: function(e, t, n) {
                return 1 === arguments.length ? this.off(e, "**") : this.off(t, e || "**", n)
            },
            size: function() {
                return this.length
            }
        }),
        oe.fn.andSelf = oe.fn.addBack,
    "function" == typeof define && define.amd && define("jquery", [], function() {
        return oe
    });
    var It = e.jQuery
        , Pt = e.$;
    return oe.noConflict = function(t) {
        return e.$ === oe && (e.$ = Pt),
        t && e.jQuery === oe && (e.jQuery = It),
            oe
    }
        ,
    t || (e.jQuery = e.$ = oe),
        oe
}),
    function(e) {
        e.urlParam = function(e, t) {
            t || (t = window.location.href);
            var n = new RegExp("[\\?&]" + e + "=([^&#]*)").exec(t);
            if (n)
                return n[1] || void 0
        }
    }(jQuery),
    function(e) {
        if ("function" == typeof define && define.amd)
            define(e);
        else if ("object" == typeof exports)
            module.exports = e();
        else {
            var t = window.Cookies
                , n = window.Cookies = e();
            n.noConflict = function() {
                return window.Cookies = t,
                    n
            }
        }
    }(function() {
        function e() {
            for (var e = 0, t = {}; e < arguments.length; e++) {
                var n = arguments[e];
                for (var r in n)
                    t[r] = n[r]
            }
            return t
        }
        function t(n) {
            function r(t, i, o) {
                var a;
                if (arguments.length > 1) {
                    if (o = e({
                            path: "/"
                        }, r.defaults, o),
                        "number" == typeof o.expires) {
                        var s = new Date;
                        s.setMilliseconds(s.getMilliseconds() + 864e5 * o.expires),
                            o.expires = s
                    }
                    try {
                        a = JSON.stringify(i),
                        /^[\{\[]/.test(a) && (i = a)
                    } catch (e) {}
                    return i = n.write ? n.write(i, t) : encodeURIComponent(String(i)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent),
                        t = encodeURIComponent(String(t)),
                        t = t.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent),
                        t = t.replace(/[\(\)]/g, escape),
                        document.cookie = [t, "=", i, o.expires && "; expires=" + o.expires.toUTCString(), o.path && "; path=" + o.path, o.domain && "; domain=" + o.domain, o.secure ? "; secure" : ""].join("")
                }
                t || (a = {});
                for (var l = document.cookie ? document.cookie.split("; ") : [], c = /(%[0-9A-Z]{2})+/g, u = 0; u < l.length; u++) {
                    var d = l[u].split("=")
                        , f = d[0].replace(c, decodeURIComponent)
                        , p = d.slice(1).join("=");
                    '"' === p.charAt(0) && (p = p.slice(1, -1));
                    try {
                        if (p = n.read ? n.read(p, f) : n(p, f) || p.replace(c, decodeURIComponent),
                                this.json)
                            try {
                                p = JSON.parse(p)
                            } catch (e) {}
                        if (t === f) {
                            a = p;
                            break
                        }
                        t || (a[f] = p)
                    } catch (e) {}
                }
                return a
            }
            return r.get = r.set = r,
                r.getJSON = function() {
                    return r.apply({
                        json: !0
                    }, [].slice.call(arguments))
                }
                ,
                r.defaults = {},
                r.remove = function(t, n) {
                    r(t, "", e(n, {
                        expires: -1
                    }))
                }
                ,
                r.withConverter = t,
                r
        }
        return t(function() {})
    }),
    function() {
        "use strict";
        function e(e) {
            return "function" == typeof e || "object" == typeof e && null !== e
        }
        function t(e) {
            return "function" == typeof e
        }
        function n(e) {
            return "object" == typeof e && null !== e
        }
        function r(e) {
            M = e
        }
        function i(e) {
            B = e
        }
        function o() {
            return function() {
                q(s)
            }
        }
        function a() {
            return function() {
                setTimeout(s, 1)
            }
        }
        function s() {
            for (var e = 0; e < H; e += 2) {
                (0,
                    Y[e])(Y[e + 1]),
                    Y[e] = void 0,
                    Y[e + 1] = void 0
            }
            H = 0
        }
        function l() {}
        function c() {
            return new TypeError("You cannot resolve a promise with itself")
        }
        function u() {
            return new TypeError("A promises callback cannot return that same promise.")
        }
        function d(e) {
            try {
                return e.then
            } catch (e) {
                return Q.error = e,
                    Q
            }
        }
        function f(e, t, n, r) {
            try {
                e.call(t, n, r)
            } catch (e) {
                return e
            }
        }
        function p(e, t, n) {
            B(function(e) {
                var r = !1
                    , i = f(n, t, function(n) {
                    r || (r = !0,
                        t !== n ? g(e, n) : y(e, n))
                }, function(t) {
                    r || (r = !0,
                        b(e, t))
                }, "Settle: " + (e._label || " unknown promise"));
                !r && i && (r = !0,
                    b(e, i))
            }, e)
        }
        function h(e, t) {
            t._state === G ? y(e, t._result) : t._state === J ? b(e, t._result) : w(t, void 0, function(t) {
                g(e, t)
            }, function(t) {
                b(e, t)
            })
        }
        function m(e, n) {
            if (n.constructor === e.constructor)
                h(e, n);
            else {
                var r = d(n);
                r === Q ? b(e, Q.error) : void 0 === r ? y(e, n) : t(r) ? p(e, n, r) : y(e, n)
            }
        }
        function g(t, n) {
            t === n ? b(t, c()) : e(n) ? m(t, n) : y(t, n)
        }
        function v(e) {
            e._onerror && e._onerror(e._result),
                x(e)
        }
        function y(e, t) {
            e._state === V && (e._result = t,
                e._state = G,
            0 !== e._subscribers.length && B(x, e))
        }
        function b(e, t) {
            e._state === V && (e._state = J,
                e._result = t,
                B(v, e))
        }
        function w(e, t, n, r) {
            var i = e._subscribers
                , o = i.length;
            e._onerror = null ,
                i[o] = t,
                i[o + G] = n,
                i[o + J] = r,
            0 === o && e._state && B(x, e)
        }
        function x(e) {
            var t = e._subscribers
                , n = e._state;
            if (0 !== t.length) {
                for (var r, i, o = e._result, a = 0; a < t.length; a += 3)
                    r = t[a],
                        i = t[a + n],
                        r ? T(n, r, i, o) : i(o);
                e._subscribers.length = 0
            }
        }
        function C() {
            this.error = null
        }
        function k(e, t) {
            try {
                return e(t)
            } catch (e) {
                return K.error = e,
                    K
            }
        }
        function T(e, n, r, i) {
            var o, a, s, l, c = t(r);
            if (c) {
                if (o = k(r, i),
                        o === K ? (l = !0,
                            a = o.error,
                            o = null ) : s = !0,
                    n === o)
                    return void b(n, u())
            } else
                o = i,
                    s = !0;
            n._state !== V || (c && s ? g(n, o) : l ? b(n, a) : e === G ? y(n, o) : e === J && b(n, o))
        }
        function j(e, t) {
            try {
                t(function(t) {
                    g(e, t)
                }, function(t) {
                    b(e, t)
                })
            } catch (t) {
                b(e, t)
            }
        }
        function $(e, t) {
            var n = this;
            n._instanceConstructor = e,
                n.promise = new e(l),
                n._validateInput(t) ? (n._input = t,
                    n.length = t.length,
                    n._remaining = t.length,
                    n._init(),
                    0 === n.length ? y(n.promise, n._result) : (n.length = n.length || 0,
                        n._enumerate(),
                    0 === n._remaining && y(n.promise, n._result))) : b(n.promise, n._validationError())
        }
        function S(e) {
            return new Z(this,e).promise
        }
        function A(e) {
            function t(e) {
                g(i, e)
            }
            function n(e) {
                b(i, e)
            }
            var r = this
                , i = new r(l);
            if (!P(e))
                return b(i, new TypeError("You must pass an array to race.")),
                    i;
            for (var o = e.length, a = 0; i._state === V && a < o; a++)
                w(r.resolve(e[a]), void 0, t, n);
            return i
        }
        function E(e) {
            var t = this;
            if (e && "object" == typeof e && e.constructor === t)
                return e;
            var n = new t(l);
            return g(n, e),
                n
        }
        function D(e) {
            var t = this
                , n = new t(l);
            return b(n, e),
                n
        }
        function _() {
            throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")
        }
        function F() {
            throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")
        }
        function N(e) {
            this._id = ie++,
                this._state = void 0,
                this._result = void 0,
                this._subscribers = [],
            l !== e && (t(e) || _(),
            this instanceof N || F(),
                j(this, e))
        }
        function O() {
            var e;
            if ("undefined" != typeof global)
                e = global;
            else if ("undefined" != typeof self)
                e = self;
            else
                try {
                    e = Function("return this")()
                } catch (e) {
                    throw new Error("polyfill failed because global object is unavailable in this environment")
                }
            var t = e.Promise;
            t && "[object Promise]" === Object.prototype.toString.call(t.resolve()) && !t.cast || (e.Promise = oe)
        }
        var L;
        L = Array.isArray ? Array.isArray : function(e) {
            return "[object Array]" === Object.prototype.toString.call(e)
        }
        ;
        var q, M, I, P = L, H = 0, B = function(e, t) {
            Y[H] = e,
                Y[H + 1] = t,
            2 === (H += 2) && (M ? M(s) : I())
        }, R = "undefined" != typeof window ? window : void 0, z = R || {}, W = z.MutationObserver || z.WebKitMutationObserver, U = "undefined" != typeof process && "[object process]" === {}.toString.call(process), X = "undefined" != typeof Uint8ClampedArray && "undefined" != typeof importScripts && "undefined" != typeof MessageChannel, Y = new Array(1e3);
        I = U ? function() {
            return function() {
                process.nextTick(s)
            }
        }() : W ? function() {
            var e = 0
                , t = new W(s)
                , n = document.createTextNode("");
            return t.observe(n, {
                characterData: !0
            }),
                function() {
                    n.data = e = ++e % 2
                }
        }() : X ? function() {
            var e = new MessageChannel;
            return e.port1.onmessage = s,
                function() {
                    e.port2.postMessage(0)
                }
        }() : void 0 === R && "function" == typeof require ? function() {
            try {
                var e = require
                    , t = e("vertx");
                return q = t.runOnLoop || t.runOnContext,
                    o()
            } catch (e) {
                return a()
            }
        }() : a();
        var V = void 0
            , G = 1
            , J = 2
            , Q = new C
            , K = new C;
        $.prototype._validateInput = function(e) {
            return P(e)
        }
            ,
            $.prototype._validationError = function() {
                return new Error("Array Methods must be provided an Array")
            }
            ,
            $.prototype._init = function() {
                this._result = new Array(this.length)
            }
        ;
        var Z = $;
        $.prototype._enumerate = function() {
            for (var e = this, t = e.length, n = e.promise, r = e._input, i = 0; n._state === V && i < t; i++)
                e._eachEntry(r[i], i)
        }
            ,
            $.prototype._eachEntry = function(e, t) {
                var r = this
                    , i = r._instanceConstructor;
                n(e) ? e.constructor === i && e._state !== V ? (e._onerror = null ,
                    r._settledAt(e._state, t, e._result)) : r._willSettleAt(i.resolve(e), t) : (r._remaining--,
                    r._result[t] = e)
            }
            ,
            $.prototype._settledAt = function(e, t, n) {
                var r = this
                    , i = r.promise;
                i._state === V && (r._remaining--,
                    e === J ? b(i, n) : r._result[t] = n),
                0 === r._remaining && y(i, r._result)
            }
            ,
            $.prototype._willSettleAt = function(e, t) {
                var n = this;
                w(e, void 0, function(e) {
                    n._settledAt(G, t, e)
                }, function(e) {
                    n._settledAt(J, t, e)
                })
            }
        ;
        var ee = S
            , te = A
            , ne = E
            , re = D
            , ie = 0
            , oe = N;
        N.all = ee,
            N.race = te,
            N.resolve = ne,
            N.reject = re,
            N._setScheduler = r,
            N._setAsap = i,
            N._asap = B,
            N.prototype = {
                constructor: N,
                then: function(e, t) {
                    var n = this
                        , r = n._state;
                    if (r === G && !e || r === J && !t)
                        return this;
                    var i = new this.constructor(l)
                        , o = n._result;
                    if (r) {
                        var a = arguments[r - 1];
                        B(function() {
                            T(r, i, a, o)
                        })
                    } else
                        w(n, i, e, t);
                    return i
                },
                catch: function(e) {
                    return this.then(null , e)
                }
            };
        var ae = O
            , se = {
            Promise: oe,
            polyfill: ae
        };
        "function" == typeof define && define.amd ? define(function() {
            return se
        }) : "undefined" != typeof module && module.exports ? module.exports = se : void 0 !== this && (this.ES6Promise = se),
            ae()
    }
        .call(this),
    Object.getOwnPropertyDescriptors = function(e) {
        var t = {};
        for (var n in e)
            e.hasOwnProperty(n) && (t[n] = Object.getOwnPropertyDescriptor(e, n));
        return t
    }
    ,
    Function.prototype.extend = function(e) {
        var t, n = this;
        return e.hasOwnProperty("constructor") || Object.defineProperty(e, "constructor", {
            value: function() {
                n.apply(this, arguments)
            },
            writable: !0,
            configurable: !0,
            enumerable: !1
        }),
            t = e.constructor,
            t.prototype = Object.create(this.prototype, Object.getOwnPropertyDescriptors(e)),
            t
    }
    ,
    function(e) {
        "function" == typeof define && define.amd ? define(["jquery"], e) : "object" == typeof exports ? module.exports = e(require("jquery")) : e(jQuery)
    }(function(e) {
        e.fn.jScrollPane = function(t) {
            function n(t, n) {
                function r(n) {
                    var o, s, c, u, d, h, m = !1, g = !1;
                    if (P = n,
                        void 0 === H)
                        d = t.scrollTop(),
                            h = t.scrollLeft(),
                            t.css({
                                overflow: "hidden",
                                padding: 0
                            }),
                            B = t.innerWidth() + ve,
                            R = t.innerHeight(),
                            t.width(B),
                            H = e('<div class="jspPane" />').css("padding", ge).append(t.children()),
                            z = e('<div class="jspContainer" />').css({
                                width: B + "px",
                                height: R + "px"
                            }).append(H).appendTo(t);
                    else {
                        if (t.css("width", ""),
                                m = P.stickToBottom && $(),
                                g = P.stickToRight && S(),
                                u = t.innerWidth() + ve != B || t.outerHeight() != R,
                            u && (B = t.innerWidth() + ve,
                                R = t.innerHeight(),
                                z.css({
                                    width: B + "px",
                                    height: R + "px"
                                })),
                            !u && ye == W && H.outerHeight() == U)
                            return void t.width(B);
                        ye = W,
                            H.css("width", ""),
                            t.width(B),
                            z.find(">.jspVerticalBar,>.jspHorizontalBar").remove().end()
                    }
                    H.css("overflow", "auto"),
                        W = n.contentWidth ? n.contentWidth : H[0].scrollWidth,
                        U = H[0].scrollHeight,
                        H.css("overflow", ""),
                        X = W / B,
                        Y = U / R,
                        V = Y > 1,
                        G = X > 1,
                        G || V ? (t.addClass("jspScrollable"),
                            o = P.maintainPosition && (K || te),
                        o && (s = T(),
                            c = j()),
                            i(),
                            a(),
                            l(),
                        o && (C(g ? W - B : s, !1),
                            x(m ? U - R : c, !1)),
                            _(),
                            A(),
                            M(),
                        P.enableKeyboardNavigation && N(),
                        P.clickOnTrack && f(),
                            L(),
                        P.hijackInternalLinks && q()) : (t.removeClass("jspScrollable"),
                            H.css({
                                top: 0,
                                left: 0,
                                width: z.width() - ve
                            }),
                            E(),
                            F(),
                            O(),
                            p()),
                        P.autoReinitialise && !me ? me = setInterval(function() {
                            r(P)
                        }, P.autoReinitialiseDelay) : !P.autoReinitialise && me && clearInterval(me),
                    d && t.scrollTop(0) && x(d, !1),
                    h && t.scrollLeft(0) && C(h, !1),
                        t.trigger("jsp-initialised", [G || V])
                }
                function i() {
                    V && (z.append(e('<div class="jspVerticalBar" />').append(e('<div class="jspCap jspCapTop" />'), e('<div class="jspTrack" />').append(e('<div class="jspDrag" />').append(e('<div class="jspDragTop" />'), e('<div class="jspDragBottom" />'))), e('<div class="jspCap jspCapBottom" />'))),
                        ne = z.find(">.jspVerticalBar"),
                        re = ne.find(">.jspTrack"),
                        J = re.find(">.jspDrag"),
                    P.showArrows && (se = e('<a class="jspArrow jspArrowUp" />').bind("mousedown.jsp", u(0, -1)).bind("click.jsp", D),
                        le = e('<a class="jspArrow jspArrowDown" />').bind("mousedown.jsp", u(0, 1)).bind("click.jsp", D),
                    P.arrowScrollOnHover && (se.bind("mouseover.jsp", u(0, -1, se)),
                        le.bind("mouseover.jsp", u(0, 1, le))),
                        c(re, P.verticalArrowPositions, se, le)),
                        oe = R,
                        z.find(">.jspVerticalBar>.jspCap:visible,>.jspVerticalBar>.jspArrow").each(function() {
                            oe -= e(this).outerHeight()
                        }),
                        J.hover(function() {
                            J.addClass("jspHover")
                        }, function() {
                            J.removeClass("jspHover")
                        }).bind("mousedown.jsp", function(t) {
                            e("html").bind("dragstart.jsp selectstart.jsp", D),
                                J.addClass("jspActive");
                            var n = t.pageY - J.position().top;
                            return e("html").bind("mousemove.jsp", function(e) {
                                m(e.pageY - n, !1)
                            }).bind("mouseup.jsp mouseleave.jsp", h),
                                !1
                        }),
                        o())
                }
                function o() {
                    re.height(oe + "px"),
                        K = 0,
                        ie = P.verticalGutter + re.outerWidth(),
                        H.width(B - ie - ve);
                    try {
                        0 === ne.position().left && H.css("margin-left", ie + "px")
                    } catch (e) {}
                }
                function a() {
                    G && (z.append(e('<div class="jspHorizontalBar" />').append(e('<div class="jspCap jspCapLeft" />'), e('<div class="jspTrack" />').append(e('<div class="jspDrag" />').append(e('<div class="jspDragLeft" />'), e('<div class="jspDragRight" />'))), e('<div class="jspCap jspCapRight" />'))),
                        ce = z.find(">.jspHorizontalBar"),
                        ue = ce.find(">.jspTrack"),
                        Z = ue.find(">.jspDrag"),
                    P.showArrows && (pe = e('<a class="jspArrow jspArrowLeft" />').bind("mousedown.jsp", u(-1, 0)).bind("click.jsp", D),
                        he = e('<a class="jspArrow jspArrowRight" />').bind("mousedown.jsp", u(1, 0)).bind("click.jsp", D),
                    P.arrowScrollOnHover && (pe.bind("mouseover.jsp", u(-1, 0, pe)),
                        he.bind("mouseover.jsp", u(1, 0, he))),
                        c(ue, P.horizontalArrowPositions, pe, he)),
                        Z.hover(function() {
                            Z.addClass("jspHover")
                        }, function() {
                            Z.removeClass("jspHover")
                        }).bind("mousedown.jsp", function(t) {
                            e("html").bind("dragstart.jsp selectstart.jsp", D),
                                Z.addClass("jspActive");
                            var n = t.pageX - Z.position().left;
                            return e("html").bind("mousemove.jsp", function(e) {
                                v(e.pageX - n, !1)
                            }).bind("mouseup.jsp mouseleave.jsp", h),
                                !1
                        }),
                        de = z.innerWidth(),
                        s())
                }
                function s() {
                    z.find(">.jspHorizontalBar>.jspCap:visible,>.jspHorizontalBar>.jspArrow").each(function() {
                        de -= e(this).outerWidth()
                    }),
                        ue.width(de + "px"),
                        te = 0
                }
                function l() {
                    if (G && V) {
                        var t = ue.outerHeight()
                            , n = re.outerWidth();
                        oe -= t,
                            e(ce).find(">.jspCap:visible,>.jspArrow").each(function() {
                                de += e(this).outerWidth()
                            }),
                            de -= n,
                            R -= n,
                            B -= t,
                            ue.parent().append(e('<div class="jspCorner" />').css("width", t + "px")),
                            o(),
                            s()
                    }
                    G && H.width(z.outerWidth() - ve + "px"),
                        U = H.outerHeight(),
                        Y = U / R,
                    G && (fe = Math.ceil(1 / X * de),
                        fe > P.horizontalDragMaxWidth ? fe = P.horizontalDragMaxWidth : fe < P.horizontalDragMinWidth && (fe = P.horizontalDragMinWidth),
                        Z.width(fe + "px"),
                        ee = de - fe,
                        y(te)),
                    V && (ae = Math.ceil(1 / Y * oe),
                        ae > P.verticalDragMaxHeight ? ae = P.verticalDragMaxHeight : ae < P.verticalDragMinHeight && (ae = P.verticalDragMinHeight),
                        J.height(ae + "px"),
                        Q = oe - ae,
                        g(K))
                }
                function c(e, t, n, r) {
                    var i, o = "before", a = "after";
                    "os" == t && (t = /Mac/.test(navigator.platform) ? "after" : "split"),
                        t == o ? a = t : t == a && (o = t,
                            i = n,
                            n = r,
                            r = i),
                        e[o](n)[a](r)
                }
                function u(e, t, n) {
                    return function() {
                        return d(e, t, this, n),
                            this.blur(),
                            !1
                    }
                }
                function d(t, n, r, i) {
                    r = e(r).addClass("jspActive");
                    var o, a, s = !0, l = function() {
                        0 !== t && be.scrollByX(t * P.arrowButtonSpeed),
                        0 !== n && be.scrollByY(n * P.arrowButtonSpeed),
                            a = setTimeout(l, s ? P.initialDelay : P.arrowRepeatFreq),
                            s = !1
                    };
                    l(),
                        o = i ? "mouseout.jsp" : "mouseup.jsp",
                        i = i || e("html"),
                        i.bind(o, function() {
                            r.removeClass("jspActive"),
                            a && clearTimeout(a),
                                a = null ,
                                i.unbind(o)
                        })
                }
                function f() {
                    p(),
                    V && re.bind("mousedown.jsp", function(t) {
                        if (void 0 === t.originalTarget || t.originalTarget == t.currentTarget) {
                            var n, r = e(this), i = r.offset(), o = t.pageY - i.top - K, a = !0, s = function() {
                                var e = r.offset()
                                    , i = t.pageY - e.top - ae / 2
                                    , c = R * P.scrollPagePercent
                                    , u = Q * c / (U - R);
                                if (o < 0)
                                    K - u > i ? be.scrollByY(-c) : m(i);
                                else {
                                    if (!(o > 0))
                                        return void l();
                                    K + u < i ? be.scrollByY(c) : m(i)
                                }
                                n = setTimeout(s, a ? P.initialDelay : P.trackClickRepeatFreq),
                                    a = !1
                            }, l = function() {
                                n && clearTimeout(n),
                                    n = null ,
                                    e(document).unbind("mouseup.jsp", l)
                            };
                            return s(),
                                e(document).bind("mouseup.jsp", l),
                                !1
                        }
                    }),
                    G && ue.bind("mousedown.jsp", function(t) {
                        if (void 0 === t.originalTarget || t.originalTarget == t.currentTarget) {
                            var n, r = e(this), i = r.offset(), o = t.pageX - i.left - te, a = !0, s = function() {
                                var e = r.offset()
                                    , i = t.pageX - e.left - fe / 2
                                    , c = B * P.scrollPagePercent
                                    , u = ee * c / (W - B);
                                if (o < 0)
                                    te - u > i ? be.scrollByX(-c) : v(i);
                                else {
                                    if (!(o > 0))
                                        return void l();
                                    te + u < i ? be.scrollByX(c) : v(i)
                                }
                                n = setTimeout(s, a ? P.initialDelay : P.trackClickRepeatFreq),
                                    a = !1
                            }, l = function() {
                                n && clearTimeout(n),
                                    n = null ,
                                    e(document).unbind("mouseup.jsp", l)
                            };
                            return s(),
                                e(document).bind("mouseup.jsp", l),
                                !1
                        }
                    })
                }
                function p() {
                    ue && ue.unbind("mousedown.jsp"),
                    re && re.unbind("mousedown.jsp")
                }
                function h() {
                    e("html").unbind("dragstart.jsp selectstart.jsp mousemove.jsp mouseup.jsp mouseleave.jsp"),
                    J && J.removeClass("jspActive"),
                    Z && Z.removeClass("jspActive")
                }
                function m(e, t) {
                    V && (e < 0 ? e = 0 : e > Q && (e = Q),
                    void 0 === t && (t = P.animateScroll),
                        t ? be.animate(J, "top", e, g) : (J.css("top", e),
                            g(e)))
                }
                function g(e) {
                    void 0 === e && (e = J.position().top),
                        z.scrollTop(0),
                        K = e || 0;
                    var n = 0 === K
                        , r = K == Q
                        , i = e / Q
                        , o = -i * (U - R);
                    we == n && Ce == r || (we = n,
                        Ce = r,
                        t.trigger("jsp-arrow-change", [we, Ce, xe, ke])),
                        b(n, r),
                        H.css("top", o),
                        t.trigger("jsp-scroll-y", [-o, n, r]).trigger("scroll")
                }
                function v(e, t) {
                    G && (e < 0 ? e = 0 : e > ee && (e = ee),
                    void 0 === t && (t = P.animateScroll),
                        t ? be.animate(Z, "left", e, y) : (Z.css("left", e),
                            y(e)))
                }
                function y(e) {
                    void 0 === e && (e = Z.position().left),
                        z.scrollTop(0),
                        te = e || 0;
                    var n = 0 === te
                        , r = te == ee
                        , i = e / ee
                        , o = -i * (W - B);
                    xe == n && ke == r || (xe = n,
                        ke = r,
                        t.trigger("jsp-arrow-change", [we, Ce, xe, ke])),
                        w(n, r),
                        H.css("left", o),
                        t.trigger("jsp-scroll-x", [-o, n, r]).trigger("scroll")
                }
                function b(e, t) {
                    P.showArrows && (se[e ? "addClass" : "removeClass"]("jspDisabled"),
                        le[t ? "addClass" : "removeClass"]("jspDisabled"))
                }
                function w(e, t) {
                    P.showArrows && (pe[e ? "addClass" : "removeClass"]("jspDisabled"),
                        he[t ? "addClass" : "removeClass"]("jspDisabled"))
                }
                function x(e, t) {
                    m(e / (U - R) * Q, t)
                }
                function C(e, t) {
                    v(e / (W - B) * ee, t)
                }
                function k(t, n, r) {
                    var i, o, a, s, l, c, u, d, f, p = 0, h = 0;
                    try {
                        i = e(t)
                    } catch (e) {
                        return
                    }
                    for (o = i.outerHeight(),
                             a = i.outerWidth(),
                             z.scrollTop(0),
                             z.scrollLeft(0); !i.is(".jspPane"); )
                        if (p += i.position().top,
                                h += i.position().left,
                                i = i.offsetParent(),
                                /^body|html$/i.test(i[0].nodeName))
                            return;
                    s = j(),
                        c = s + R,
                        p < s || n ? d = p - P.horizontalGutter : p + o > c && (d = p - R + o + P.horizontalGutter),
                    isNaN(d) || x(d, r),
                        l = T(),
                        u = l + B,
                        h < l || n ? f = h - P.horizontalGutter : h + a > u && (f = h - B + a + P.horizontalGutter),
                    isNaN(f) || C(f, r)
                }
                function T() {
                    return -H.position().left
                }
                function j() {
                    return -H.position().top
                }
                function $() {
                    var e = U - R;
                    return e > 20 && e - j() < 10
                }
                function S() {
                    var e = W - B;
                    return e > 20 && e - T() < 10
                }
                function A() {
                    z.unbind(je).bind(je, function(e, t, n, r) {
                        te || (te = 0),
                        K || (K = 0);
                        var i = te
                            , o = K
                            , a = e.deltaFactor || P.mouseWheelSpeed;
                        return be.scrollBy(n * a, -r * a, !1),
                        i == te && o == K
                    })
                }
                function E() {
                    z.unbind(je)
                }
                function D() {
                    return !1
                }
                function _() {
                    H.find(":input,a").unbind("focus.jsp").bind("focus.jsp", function(e) {
                        k(e.target, !1)
                    })
                }
                function F() {
                    H.find(":input,a").unbind("focus.jsp")
                }
                function N() {
                    function n() {
                        var e = te
                            , t = K;
                        switch (r) {
                            case 40:
                                be.scrollByY(P.keyboardSpeed, !1);
                                break;
                            case 38:
                                be.scrollByY(-P.keyboardSpeed, !1);
                                break;
                            case 34:
                            case 32:
                                be.scrollByY(R * P.scrollPagePercent, !1);
                                break;
                            case 33:
                                be.scrollByY(-R * P.scrollPagePercent, !1);
                                break;
                            case 39:
                                be.scrollByX(P.keyboardSpeed, !1);
                                break;
                            case 37:
                                be.scrollByX(-P.keyboardSpeed, !1)
                        }
                        return i = e != te || t != K
                    }
                    var r, i, o = [];
                    G && o.push(ce[0]),
                    V && o.push(ne[0]),
                        H.bind("focus.jsp", function() {
                            t.focus()
                        }),
                        t.attr("tabindex", 0).unbind("keydown.jsp keypress.jsp").bind("keydown.jsp", function(t) {
                            if (t.target === this || o.length && e(t.target).closest(o).length) {
                                var a = te
                                    , s = K;
                                switch (t.keyCode) {
                                    case 40:
                                    case 38:
                                    case 34:
                                    case 32:
                                    case 33:
                                    case 39:
                                    case 37:
                                        r = t.keyCode,
                                            n();
                                        break;
                                    case 35:
                                        x(U - R),
                                            r = null ;
                                        break;
                                    case 36:
                                        x(0),
                                            r = null
                                }
                                return !(i = t.keyCode == r && a != te || s != K)
                            }
                        }).bind("keypress.jsp", function(t) {
                            if (t.keyCode == r && n(),
                                t.target === this || o.length && e(t.target).closest(o).length)
                                return !i
                        }),
                        P.hideFocus ? (t.css("outline", "none"),
                        "hideFocus"in z[0] && t.attr("hideFocus", !0)) : (t.css("outline", ""),
                        "hideFocus"in z[0] && t.attr("hideFocus", !1))
                }
                function O() {
                    t.attr("tabindex", "-1").removeAttr("tabindex").unbind("keydown.jsp keypress.jsp"),
                        H.unbind(".jsp")
                }
                function L() {
                    if (location.hash && location.hash.length > 1) {
                        var t, n, r = escape(location.hash.substr(1));
                        try {
                            t = e("#" + r + ', a[name="' + r + '"]')
                        } catch (e) {
                            return
                        }
                        t.length && H.find(r) && (0 === z.scrollTop() ? n = setInterval(function() {
                            z.scrollTop() > 0 && (k(t, !0),
                                e(document).scrollTop(z.position().top),
                                clearInterval(n))
                        }, 50) : (k(t, !0),
                            e(document).scrollTop(z.position().top)))
                    }
                }
                function q() {
                    e(document.body).data("jspHijack") || (e(document.body).data("jspHijack", !0),
                        e(document.body).delegate("a[href*=#]", "click", function(t) {
                            var n, r, i, o, a, s, l = this.href.substr(0, this.href.indexOf("#")), c = location.href;
                            if (-1 !== location.href.indexOf("#") && (c = location.href.substr(0, location.href.indexOf("#"))),
                                l === c) {
                                n = escape(this.href.substr(this.href.indexOf("#") + 1));
                                try {
                                    r = e("#" + n + ', a[name="' + n + '"]')
                                } catch (e) {
                                    return
                                }
                                r.length && (i = r.closest(".jspScrollable"),
                                    o = i.data("jsp"),
                                    o.scrollToElement(r, !0),
                                i[0].scrollIntoView && (a = e(window).scrollTop(),
                                ((s = r.offset().top) < a || s > a + e(window).height()) && i[0].scrollIntoView()),
                                    t.preventDefault())
                            }
                        }))
                }
                function M() {
                    var e, t, n, r, i, o = !1;
                    z.unbind("touchstart.jsp touchmove.jsp touchend.jsp click.jsp-touchclick").bind("touchstart.jsp", function(a) {
                        var s = a.originalEvent.touches[0];
                        e = T(),
                            t = j(),
                            n = s.pageX,
                            r = s.pageY,
                            i = !1,
                            o = !0
                    }).bind("touchmove.jsp", function(a) {
                        if (o) {
                            var s = a.originalEvent.touches[0]
                                , l = te
                                , c = K;
                            return be.scrollTo(e + n - s.pageX, t + r - s.pageY),
                                i = i || Math.abs(n - s.pageX) > 5 || Math.abs(r - s.pageY) > 5,
                            l == te && c == K
                        }
                    }).bind("touchend.jsp", function(e) {
                        o = !1
                    }).bind("click.jsp-touchclick", function(e) {
                        if (i)
                            return i = !1,
                                !1
                    })
                }
                function I() {
                    var e = j()
                        , n = T();
                    t.removeClass("jspScrollable").unbind(".jsp"),
                        H.unbind(".jsp"),
                        t.replaceWith(Te.append(H.children())),
                        Te.scrollTop(e),
                        Te.scrollLeft(n),
                    me && clearInterval(me)
                }
                var P, H, B, R, z, W, U, X, Y, V, G, J, Q, K, Z, ee, te, ne, re, ie, oe, ae, se, le, ce, ue, de, fe, pe, he, me, ge, ve, ye, be = this, we = !0, xe = !0, Ce = !1, ke = !1, Te = t.clone(!1, !1).empty(), je = e.fn.mwheelIntent ? "mwheelIntent.jsp" : "mousewheel.jsp";
                "border-box" === t.css("box-sizing") ? (ge = 0,
                    ve = 0) : (ge = t.css("paddingTop") + " " + t.css("paddingRight") + " " + t.css("paddingBottom") + " " + t.css("paddingLeft"),
                    ve = (parseInt(t.css("paddingLeft"), 10) || 0) + (parseInt(t.css("paddingRight"), 10) || 0)),
                    e.extend(be, {
                        reinitialise: function(t) {
                            t = e.extend({}, P, t),
                                r(t)
                        },
                        scrollToElement: function(e, t, n) {
                            k(e, t, n)
                        },
                        scrollTo: function(e, t, n) {
                            C(e, n),
                                x(t, n)
                        },
                        scrollToX: function(e, t) {
                            C(e, t)
                        },
                        scrollToY: function(e, t) {
                            x(e, t)
                        },
                        scrollToPercentX: function(e, t) {
                            C(e * (W - B), t)
                        },
                        scrollToPercentY: function(e, t) {
                            x(e * (U - R), t)
                        },
                        scrollBy: function(e, t, n) {
                            be.scrollByX(e, n),
                                be.scrollByY(t, n)
                        },
                        scrollByX: function(e, t) {
                            v((T() + Math[e < 0 ? "floor" : "ceil"](e)) / (W - B) * ee, t)
                        },
                        scrollByY: function(e, t) {
                            m((j() + Math[e < 0 ? "floor" : "ceil"](e)) / (U - R) * Q, t)
                        },
                        positionDragX: function(e, t) {
                            v(e, t)
                        },
                        positionDragY: function(e, t) {
                            m(e, t)
                        },
                        animate: function(e, t, n, r) {
                            var i = {};
                            i[t] = n,
                                e.animate(i, {
                                    duration: P.animateDuration,
                                    easing: P.animateEase,
                                    queue: !1,
                                    step: r
                                })
                        },
                        getContentPositionX: function() {
                            return T()
                        },
                        getContentPositionY: function() {
                            return j()
                        },
                        getContentWidth: function() {
                            return W
                        },
                        getContentHeight: function() {
                            return U
                        },
                        getPercentScrolledX: function() {
                            return T() / (W - B)
                        },
                        getPercentScrolledY: function() {
                            return j() / (U - R)
                        },
                        getIsScrollableH: function() {
                            return G
                        },
                        getIsScrollableV: function() {
                            return V
                        },
                        getContentPane: function() {
                            return H
                        },
                        scrollToBottom: function(e) {
                            m(Q, e)
                        },
                        hijackInternalLinks: e.noop,
                        destroy: function() {
                            I()
                        }
                    }),
                    r(n)
            }
            return t = e.extend({}, e.fn.jScrollPane.defaults, t),
                e.each(["arrowButtonSpeed", "trackClickSpeed", "keyboardSpeed"], function() {
                    t[this] = t[this] || t.speed
                }),
                this.each(function() {
                    var r = e(this)
                        , i = r.data("jsp");
                    i ? i.reinitialise(t) : (e("script", r).filter('[type="text/javascript"],:not([type])').remove(),
                        i = new n(r,t),
                        r.data("jsp", i))
                })
        }
            ,
            e.fn.jScrollPane.defaults = {
                showArrows: !1,
                maintainPosition: !0,
                stickToBottom: !1,
                stickToRight: !1,
                clickOnTrack: !0,
                autoReinitialise: !1,
                autoReinitialiseDelay: 500,
                verticalDragMinHeight: 0,
                verticalDragMaxHeight: 99999,
                horizontalDragMinWidth: 0,
                horizontalDragMaxWidth: 99999,
                contentWidth: void 0,
                animateScroll: !1,
                animateDuration: 300,
                animateEase: "linear",
                hijackInternalLinks: !1,
                verticalGutter: 4,
                horizontalGutter: 4,
                mouseWheelSpeed: 3,
                arrowButtonSpeed: 0,
                arrowRepeatFreq: 50,
                arrowScrollOnHover: !1,
                trackClickSpeed: 0,
                trackClickRepeatFreq: 70,
                verticalArrowPositions: "split",
                horizontalArrowPositions: "split",
                enableKeyboardNavigation: !0,
                hideFocus: !1,
                keyboardSpeed: 0,
                initialDelay: 300,
                speed: 30,
                scrollPagePercent: .8
            }
    }),
    function(e) {
        "function" == typeof define && define.amd ? define(["jquery"], e) : "object" == typeof exports ? module.exports = e : e(jQuery)
    }(function(e) {
        function t(t) {
            var a = t || window.event
                , s = l.call(arguments, 1)
                , c = 0
                , d = 0
                , f = 0
                , p = 0
                , h = 0
                , m = 0;
            if (t = e.event.fix(a),
                    t.type = "mousewheel",
                "detail"in a && (f = -1 * a.detail),
                "wheelDelta"in a && (f = a.wheelDelta),
                "wheelDeltaY"in a && (f = a.wheelDeltaY),
                "wheelDeltaX"in a && (d = -1 * a.wheelDeltaX),
                "axis"in a && a.axis === a.HORIZONTAL_AXIS && (d = -1 * f,
                    f = 0),
                    c = 0 === f ? d : f,
                "deltaY"in a && (f = -1 * a.deltaY,
                    c = f),
                "deltaX"in a && (d = a.deltaX,
                0 === f && (c = -1 * d)),
                0 !== f || 0 !== d) {
                if (1 === a.deltaMode) {
                    var g = e.data(this, "mousewheel-line-height");
                    c *= g,
                        f *= g,
                        d *= g
                } else if (2 === a.deltaMode) {
                    var v = e.data(this, "mousewheel-page-height");
                    c *= v,
                        f *= v,
                        d *= v
                }
                if (p = Math.max(Math.abs(f), Math.abs(d)),
                    (!o || p < o) && (o = p,
                    r(a, p) && (o /= 40)),
                    r(a, p) && (c /= 40,
                        d /= 40,
                        f /= 40),
                        c = Math[c >= 1 ? "floor" : "ceil"](c / o),
                        d = Math[d >= 1 ? "floor" : "ceil"](d / o),
                        f = Math[f >= 1 ? "floor" : "ceil"](f / o),
                    u.settings.normalizeOffset && this.getBoundingClientRect) {
                    var y = this.getBoundingClientRect();
                    h = t.clientX - y.left,
                        m = t.clientY - y.top
                }
                return t.deltaX = d,
                    t.deltaY = f,
                    t.deltaFactor = o,
                    t.offsetX = h,
                    t.offsetY = m,
                    t.deltaMode = 0,
                    s.unshift(t, c, d, f),
                i && clearTimeout(i),
                    i = setTimeout(n, 200),
                    (e.event.dispatch || e.event.handle).apply(this, s)
            }
        }
        function n() {
            o = null
        }
        function r(e, t) {
            return u.settings.adjustOldDeltas && "mousewheel" === e.type && t % 120 == 0
        }
        var i, o, a = ["wheel", "mousewheel", "DOMMouseScroll", "MozMousePixelScroll"], s = "onwheel"in document || document.documentMode >= 9 ? ["wheel"] : ["mousewheel", "DomMouseScroll", "MozMousePixelScroll"], l = Array.prototype.slice;
        if (e.event.fixHooks)
            for (var c = a.length; c; )
                e.event.fixHooks[a[--c]] = e.event.mouseHooks;
        var u = e.event.special.mousewheel = {
            version: "3.1.12",
            setup: function() {
                if (this.addEventListener)
                    for (var n = s.length; n; )
                        this.addEventListener(s[--n], t, !1);
                else
                    this.onmousewheel = t;
                e.data(this, "mousewheel-line-height", u.getLineHeight(this)),
                    e.data(this, "mousewheel-page-height", u.getPageHeight(this))
            },
            teardown: function() {
                if (this.removeEventListener)
                    for (var n = s.length; n; )
                        this.removeEventListener(s[--n], t, !1);
                else
                    this.onmousewheel = null ;
                e.removeData(this, "mousewheel-line-height"),
                    e.removeData(this, "mousewheel-page-height")
            },
            getLineHeight: function(t) {
                var n = e(t)
                    , r = n["offsetParent"in e.fn ? "offsetParent" : "parent"]();
                return r.length || (r = e("body")),
                parseInt(r.css("fontSize"), 10) || parseInt(n.css("fontSize"), 10) || 16
            },
            getPageHeight: function(t) {
                return e(t).height()
            },
            settings: {
                adjustOldDeltas: !0,
                normalizeOffset: !0
            }
        };
        e.fn.extend({
            mousewheel: function(e) {
                return e ? this.bind("mousewheel", e) : this.trigger("mousewheel")
            },
            unmousewheel: function(e) {
                return this.unbind("mousewheel", e)
            }
        })
    }),
    function(e) {
        function t() {
            this === i.elem && (i.pos = [-260, -260],
                i.elem = !1,
                o = 3)
        }
        var n, r, i = {
            pos: [-260, -260]
        }, o = 3, a = document, s = a.documentElement, l = a.body;
        e.event.special.mwheelIntent = {
            setup: function() {
                var n = e(this).bind("mousewheel", e.event.special.mwheelIntent.handler);
                return this !== a && this !== s && this !== l && n.bind("mouseleave", t),
                    n = null ,
                    !0
            },
            teardown: function() {
                return e(this).unbind("mousewheel", e.event.special.mwheelIntent.handler).unbind("mouseleave", t),
                    !0
            },
            handler: function(t, a) {
                var s = [t.clientX, t.clientY];
                if (this === i.elem || Math.abs(i.pos[0] - s[0]) > o || Math.abs(i.pos[1] - s[1]) > o)
                    return i.elem = this,
                        i.pos = s,
                        o = 250,
                        clearTimeout(r),
                        r = setTimeout(function() {
                            o = 10
                        }, 200),
                        clearTimeout(n),
                        n = setTimeout(function() {
                            o = 3
                        }, 1500),
                        t = e.extend({}, t, {
                            type: "mwheelIntent"
                        }),
                        (e.event.dispatch || e.event.handle).apply(this, arguments)
            }
        },
            e.fn.extend({
                mwheelIntent: function(e) {
                    return e ? this.bind("mwheelIntent", e) : this.trigger("mwheelIntent")
                },
                unmwheelIntent: function(e) {
                    return this.unbind("mwheelIntent", e)
                }
            }),
            e(function() {
                l = a.body,
                    e(a).bind("mwheelIntent.mwheelIntentDefault", e.noop)
            })
    }(jQuery),
    function(e, t) {
        "function" == typeof define && define.amd ? define(["jquery"], function(n) {
            return t(e, n)
        }) : "object" == typeof exports ? t(e, require("jquery")) : t(e, e.jQuery || e.Zepto)
    }(this, function(e, t) {
        "use strict";
        function n(e) {
            if (C && "none" === e.css("animation-name") && "none" === e.css("-webkit-animation-name") && "none" === e.css("-moz-animation-name") && "none" === e.css("-o-animation-name") && "none" === e.css("-ms-animation-name"))
                return 0;
            var t, n, r, i, o = e.css("animation-duration") || e.css("-webkit-animation-duration") || e.css("-moz-animation-duration") || e.css("-o-animation-duration") || e.css("-ms-animation-duration") || "0s", a = e.css("animation-delay") || e.css("-webkit-animation-delay") || e.css("-moz-animation-delay") || e.css("-o-animation-delay") || e.css("-ms-animation-delay") || "0s", s = e.css("animation-iteration-count") || e.css("-webkit-animation-iteration-count") || e.css("-moz-animation-iteration-count") || e.css("-o-animation-iteration-count") || e.css("-ms-animation-iteration-count") || "1";
            for (o = o.split(", "),
                     a = a.split(", "),
                     s = s.split(", "),
                     i = 0,
                     n = o.length,
                     t = Number.NEGATIVE_INFINITY; i < n; i++)
                (r = parseFloat(o[i]) * parseInt(s[i], 10) + parseFloat(a[i])) > t && (t = r);
            return r
        }
        function r() {
            if (t(document.body).height() <= t(window).height())
                return 0;
            var e, n, r = document.createElement("div"), i = document.createElement("div");
            return r.style.visibility = "hidden",
                r.style.width = "100px",
                document.body.appendChild(r),
                e = r.offsetWidth,
                r.style.overflow = "scroll",
                i.style.width = "100%",
                r.appendChild(i),
                n = i.offsetWidth,
                r.parentNode.removeChild(r),
            e - n
        }
        function i() {
            if (!k) {
                var e, n, i = t("html"), o = u("is-locked");
                i.hasClass(o) || (n = t(document.body),
                    e = parseInt(n.css("padding-right"), 10) + r(),
                    n.css("padding-right", e + "px"),
                    i.addClass(o))
            }
        }
        function o() {
            if (!k) {
                var e, n, i = t("html"), o = u("is-locked");
                i.hasClass(o) && (n = t(document.body),
                    e = parseInt(n.css("padding-right"), 10) - r(),
                    n.css("padding-right", e + "px"),
                    i.removeClass(o))
            }
        }
        function a(e, t, n, r) {
            var i = u("is", t)
                , o = [u("is", w.CLOSING), u("is", w.OPENING), u("is", w.CLOSED), u("is", w.OPENED)].join(" ");
            e.$bg.removeClass(o).addClass(i),
                e.$overlay.removeClass(o).addClass(i),
                e.$wrapper.removeClass(o).addClass(i),
                e.$modal.removeClass(o).addClass(i),
                e.state = t,
            !n && e.$modal.trigger({
                type: t,
                reason: r
            }, [{
                reason: r
            }])
        }
        function s(e, r, i) {
            var o = 0
                , a = function(e) {
                e.target === this && o++
            }
                , s = function(e) {
                e.target === this && 0 == --o && (t.each(["$bg", "$overlay", "$wrapper", "$modal"], function(e, t) {
                    i[t].off(v + " " + y)
                }),
                    r())
            };
            t.each(["$bg", "$overlay", "$wrapper", "$modal"], function(e, t) {
                i[t].on(v, a).on(y, s)
            }),
                e(),
            0 === n(i.$bg) && 0 === n(i.$overlay) && 0 === n(i.$wrapper) && 0 === n(i.$modal) && (t.each(["$bg", "$overlay", "$wrapper", "$modal"], function(e, t) {
                i[t].off(v + " " + y)
            }),
                r())
        }
        function l(e) {
            e.state !== w.CLOSED && (t.each(["$bg", "$overlay", "$wrapper", "$modal"], function(t, n) {
                e[n].off(v + " " + y)
            }),
                e.$bg.removeClass(e.settings.modifier),
                e.$overlay.removeClass(e.settings.modifier).hide(),
                e.$wrapper.hide(),
                o(),
                a(e, w.CLOSED, !0))
        }
        function c(e) {
            var t, n, r, i, o = {};
            for (e = e.replace(/\s*:\s*/g, ":").replace(/\s*,\s*/g, ","),
                     t = e.split(","),
                     i = 0,
                     n = t.length; i < n; i++)
                t[i] = t[i].split(":"),
                    r = t[i][1],
                ("string" == typeof r || r instanceof String) && (r = "true" === r || "false" !== r && r),
                ("string" == typeof r || r instanceof String) && (r = isNaN(r) ? r : +r),
                    o[t[i][0]] = r;
            return o
        }
        function u() {
            for (var e = g, t = 0; t < arguments.length; ++t)
                e += "-" + arguments[t];
            return e
        }
        function d() {
            var e, n, r = location.hash.replace("#", "");
            if (r) {
                try {
                    n = t("[data-" + m + '-id="' + r + '"]')
                } catch (e) {}
                n && n.length && (e = t[m].lookup[n.data(m)]) && e.settings.hashTracking && e.open()
            } else
                p && p.state === w.OPENED && p.settings.hashTracking && p.close()
        }
        function f(e, n) {
            var r = t(document.body)
                , i = this;
            i.settings = t.extend({}, b, n),
                i.index = t[m].lookup.push(i) - 1,
                i.state = w.CLOSED,
                i.$overlay = t("." + u("overlay")),
            i.$overlay.length || (i.$overlay = t("<div>").addClass(u("overlay") + " " + u("is", w.CLOSED)).hide(),
                r.append(i.$overlay)),
                i.$bg = t("." + u("bg")).addClass(u("is", w.CLOSED)),
                i.$modal = e.addClass(g + " " + u("is-initialized") + " " + i.settings.modifier + " " + u("is", w.CLOSED)).attr("tabindex", "-1"),
                i.$wrapper = t("<div>").addClass(u("wrapper") + " " + i.settings.modifier + " " + u("is", w.CLOSED)).hide().append(i.$modal),
                r.append(i.$wrapper),
                i.$wrapper.on("click." + g, "[data-" + m + '-action="close"]', function(e) {
                    e.preventDefault(),
                        i.close()
                }),
                i.$wrapper.on("click." + g, "[data-" + m + '-action="cancel"]', function(e) {
                    e.preventDefault(),
                        i.$modal.trigger(x.CANCELLATION),
                    i.settings.closeOnCancel && i.close(x.CANCELLATION)
                }),
                i.$wrapper.on("click." + g, "[data-" + m + '-action="confirm"]', function(e) {
                    e.preventDefault(),
                        i.$modal.trigger(x.CONFIRMATION),
                    i.settings.closeOnConfirm && i.close(x.CONFIRMATION)
                }),
                i.$wrapper.on("click." + g, function(e) {
                    t(e.target).hasClass(u("wrapper")) && i.settings.closeOnOutsideClick && i.close()
                })
        }
        var p, h, m = "remodal", g = e.REMODAL_GLOBALS && e.REMODAL_GLOBALS.NAMESPACE || m, v = t.map(["animationstart", "webkitAnimationStart", "MSAnimationStart", "oAnimationStart"], function(e) {
            return e + "." + g
        }).join(" "), y = t.map(["animationend", "webkitAnimationEnd", "MSAnimationEnd", "oAnimationEnd"], function(e) {
            return e + "." + g
        }).join(" "), b = t.extend({
            hashTracking: !0,
            closeOnConfirm: !0,
            closeOnCancel: !0,
            closeOnEscape: !0,
            closeOnOutsideClick: !0,
            modifier: ""
        }, e.REMODAL_GLOBALS && e.REMODAL_GLOBALS.DEFAULTS), w = {
            CLOSING: "closing",
            CLOSED: "closed",
            OPENING: "opening",
            OPENED: "opened"
        }, x = {
            CONFIRMATION: "confirmation",
            CANCELLATION: "cancellation"
        }, C = function() {
            var e = document.createElement("div").style;
            return void 0 !== e.animationName || void 0 !== e.WebkitAnimationName || void 0 !== e.MozAnimationName || void 0 !== e.msAnimationName || void 0 !== e.OAnimationName
        }(), k = /iPad|iPhone|iPod/.test(navigator.platform);
        f.prototype.open = function() {
            var e, n = this;
            n.state !== w.OPENING && n.state !== w.CLOSING && (e = n.$modal.attr("data-" + m + "-id"),
            e && n.settings.hashTracking && (h = t(window).scrollTop(),
                location.hash = e),
            p && p !== n && l(p),
                p = n,
                i(),
                n.$bg.addClass(n.settings.modifier),
                n.$overlay.addClass(n.settings.modifier).show(),
                n.$wrapper.show().scrollTop(0),
                n.$modal.focus(),
                s(function() {
                    a(n, w.OPENING)
                }, function() {
                    a(n, w.OPENED)
                }, n))
        }
            ,
            f.prototype.close = function(e) {
                var n = this;
                n.state !== w.OPENING && n.state !== w.CLOSING && (n.settings.hashTracking && n.$modal.attr("data-" + m + "-id") === location.hash.substr(1) && (location.hash = "",
                    t(window).scrollTop(h)),
                    s(function() {
                        a(n, w.CLOSING, !1, e)
                    }, function() {
                        n.$bg.removeClass(n.settings.modifier),
                            n.$overlay.removeClass(n.settings.modifier).hide(),
                            n.$wrapper.hide(),
                            o(),
                            a(n, w.CLOSED, !1, e)
                    }, n))
            }
            ,
            f.prototype.getState = function() {
                return this.state
            }
            ,
            f.prototype.destroy = function() {
                var e, n = t[m].lookup;
                l(this),
                    this.$wrapper.remove(),
                    delete n[this.index],
                0 === (e = t.grep(n, function(e) {
                    return !!e
                }).length) && (this.$overlay.remove(),
                    this.$bg.removeClass(u("is", w.CLOSING) + " " + u("is", w.OPENING) + " " + u("is", w.CLOSED) + " " + u("is", w.OPENED)))
            }
            ,
            t[m] = {
                lookup: []
            },
            t.fn[m] = function(e) {
                var n, r;
                return this.each(function(i, o) {
                    r = t(o),
                        null == r.data(m) ? (n = new f(r,e),
                            r.data(m, n.index),
                        n.settings.hashTracking && r.attr("data-" + m + "-id") === location.hash.substr(1) && n.open()) : n = t[m].lookup[r.data(m)]
                }),
                    n
            }
            ,
            t(document).ready(function() {
                t(document).on("click", "[data-" + m + "-target]", function(e) {
                    e.preventDefault();
                    var n = e.currentTarget
                        , r = n.getAttribute("data-" + m + "-target")
                        , i = t("[data-" + m + '-id="' + r + '"]');
                    t[m].lookup[i.data(m)].open()
                }),
                    t(document).find("." + g).each(function(e, n) {
                        var r = t(n)
                            , i = r.data(m + "-options");
                        i ? ("string" == typeof i || i instanceof String) && (i = c(i)) : i = {},
                            r[m](i)
                    }),
                    t(document).on("keydown." + g, function(e) {
                        p && p.settings.closeOnEscape && p.state === w.OPENED && 27 === e.keyCode && p.close()
                    }),
                    t(window).on("hashchange." + g, d)
            })
    }),
    function(e, t) {
        var n = function(e, t, n) {
            var r;
            return function() {
                function i() {
                    n || e.apply(o, a),
                        r = null
                }
                var o = this
                    , a = arguments;
                r ? clearTimeout(r) : n && e.apply(o, a),
                    r = setTimeout(i, t || 50)
            }
        };
        jQuery.fn[t] = function(e) {
            return e ? this.bind("resize", n(e)) : this.trigger(t)
        }
    }(jQuery, "smartresize"),
    function(e) {
        "function" == typeof define && define.amd ? define(["jquery"], e) : "object" == typeof module && module.exports ? module.exports = e(require("jquery")) : e(jQuery)
    }(function(e) {
        e.extend(e.fn, {
            validate: function(t) {
                if (!this.length)
                    return void (t && t.debug && window.console && console.warn("Nothing selected, can't validate, returning nothing."));
                var n = e.data(this[0], "validator");
                return n || (this.attr("novalidate", "novalidate"),
                    n = new e.validator(t,this[0]),
                    e.data(this[0], "validator", n),
                n.settings.onsubmit && (this.on("click.validate", ":submit", function(t) {
                    n.settings.submitHandler && (n.submitButton = t.target),
                    e(this).hasClass("cancel") && (n.cancelSubmit = !0),
                    void 0 !== e(this).attr("formnovalidate") && (n.cancelSubmit = !0)
                }),
                    this.on("submit.validate", function(t) {
                        function r() {
                            var r, i;
                            return !n.settings.submitHandler || (n.submitButton && (r = e("<input type='hidden'/>").attr("name", n.submitButton.name).val(e(n.submitButton).val()).appendTo(n.currentForm)),
                                i = n.settings.submitHandler.call(n, n.currentForm, t),
                            n.submitButton && r.remove(),
                            void 0 !== i && i)
                        }
                        return n.settings.debug && t.preventDefault(),
                            n.cancelSubmit ? (n.cancelSubmit = !1,
                                r()) : n.form() ? n.pendingRequest ? (n.formSubmitted = !0,
                                !1) : r() : (n.focusInvalid(),
                                !1)
                    })),
                    n)
            },
            valid: function() {
                var t, n, r;
                return e(this[0]).is("form") ? t = this.validate().form() : (r = [],
                    t = !0,
                    n = e(this[0].form).validate(),
                    this.each(function() {
                        (t = n.element(this) && t) || (r = r.concat(n.errorList))
                    }),
                    n.errorList = r),
                    t
            },
            rules: function(t, n) {
                if (this.length) {
                    var r, i, o, a, s, l, c = this[0];
                    if (t)
                        switch (r = e.data(c.form, "validator").settings,
                            i = r.rules,
                            o = e.validator.staticRules(c),
                            t) {
                            case "add":
                                e.extend(o, e.validator.normalizeRule(n)),
                                    delete o.messages,
                                    i[c.name] = o,
                                n.messages && (r.messages[c.name] = e.extend(r.messages[c.name], n.messages));
                                break;
                            case "remove":
                                return n ? (l = {},
                                    e.each(n.split(/\s/), function(t, n) {
                                        l[n] = o[n],
                                            delete o[n],
                                        "required" === n && e(c).removeAttr("aria-required")
                                    }),
                                    l) : (delete i[c.name],
                                    o)
                        }
                    return a = e.validator.normalizeRules(e.extend({}, e.validator.classRules(c), e.validator.attributeRules(c), e.validator.dataRules(c), e.validator.staticRules(c)), c),
                    a.required && (s = a.required,
                        delete a.required,
                        a = e.extend({
                            required: s
                        }, a),
                        e(c).attr("aria-required", "true")),
                    a.remote && (s = a.remote,
                        delete a.remote,
                        a = e.extend(a, {
                            remote: s
                        })),
                        a
                }
            }
        }),
            e.extend(e.expr[":"], {
                blank: function(t) {
                    return !e.trim("" + e(t).val())
                },
                filled: function(t) {
                    var n = e(t).val();
                    return null !== n && !!e.trim("" + n)
                },
                unchecked: function(t) {
                    return !e(t).prop("checked")
                }
            }),
            e.validator = function(t, n) {
                this.settings = e.extend(!0, {}, e.validator.defaults, t),
                    this.currentForm = n,
                    this.init()
            }
            ,
            e.validator.format = function(t, n) {
                return 1 === arguments.length ? function() {
                        var n = e.makeArray(arguments);
                        return n.unshift(t),
                            e.validator.format.apply(this, n)
                    }
                    : void 0 === n ? t : (arguments.length > 2 && n.constructor !== Array && (n = e.makeArray(arguments).slice(1)),
                    n.constructor !== Array && (n = [n]),
                        e.each(n, function(e, n) {
                            t = t.replace(new RegExp("\\{" + e + "\\}","g"), function() {
                                return n
                            })
                        }),
                        t)
            }
            ,
            e.extend(e.validator, {
                defaults: {
                    messages: {},
                    groups: {},
                    rules: {},
                    errorClass: "error",
                    pendingClass: "pending",
                    validClass: "valid",
                    errorElement: "label",
                    focusCleanup: !1,
                    focusInvalid: !0,
                    errorContainer: e([]),
                    errorLabelContainer: e([]),
                    onsubmit: !0,
                    ignore: ":hidden",
                    ignoreTitle: !1,
                    onfocusin: function(e) {
                        this.lastActive = e,
                        this.settings.focusCleanup && (this.settings.unhighlight && this.settings.unhighlight.call(this, e, this.settings.errorClass, this.settings.validClass),
                            this.hideThese(this.errorsFor(e)))
                    },
                    onfocusout: function(e) {
                        this.checkable(e) || !(e.name in this.submitted) && this.optional(e) || this.element(e)
                    },
                    onkeyup: function(t, n) {
                        var r = [16, 17, 18, 20, 35, 36, 37, 38, 39, 40, 45, 144, 225];
                        9 === n.which && "" === this.elementValue(t) || -1 !== e.inArray(n.keyCode, r) || (t.name in this.submitted || t.name in this.invalid) && this.element(t)
                    },
                    onclick: function(e) {
                        e.name in this.submitted ? this.element(e) : e.parentNode.name in this.submitted && this.element(e.parentNode)
                    },
                    highlight: function(t, n, r) {
                        "radio" === t.type ? this.findByName(t.name).addClass(n).removeClass(r) : e(t).addClass(n).removeClass(r)
                    },
                    unhighlight: function(t, n, r) {
                        "radio" === t.type ? this.findByName(t.name).removeClass(n).addClass(r) : e(t).removeClass(n).addClass(r)
                    }
                },
                setDefaults: function(t) {
                    e.extend(e.validator.defaults, t)
                },
                messages: {
                    required: "This field is required.",
                    remote: "Please fix this field.",
                    email: "Please enter a valid email address.",
                    url: "Please enter a valid URL.",
                    date: "Please enter a valid date.",
                    dateISO: "Please enter a valid date ( ISO ).",
                    number: "Please enter a valid number.",
                    digits: "Please enter only digits.",
                    equalTo: "Please enter the same value again.",
                    maxlength: e.validator.format("Please enter no more than {0} characters."),
                    minlength: e.validator.format("Please enter at least {0} characters."),
                    rangelength: e.validator.format("Please enter a value between {0} and {1} characters long."),
                    range: e.validator.format("Please enter a value between {0} and {1}."),
                    max: e.validator.format("Please enter a value less than or equal to {0}."),
                    min: e.validator.format("Please enter a value greater than or equal to {0}."),
                    step: e.validator.format("Please enter a multiple of {0}.")
                },
                autoCreateRanges: !1,
                prototype: {
                    init: function() {
                        function t(t) {
                            var n = e.data(this.form, "validator")
                                , r = "on" + t.type.replace(/^validate/, "")
                                , i = n.settings;
                            i[r] && !e(this).is(i.ignore) && i[r].call(n, this, t)
                        }
                        this.labelContainer = e(this.settings.errorLabelContainer),
                            this.errorContext = this.labelContainer.length && this.labelContainer || e(this.currentForm),
                            this.containers = e(this.settings.errorContainer).add(this.settings.errorLabelContainer),
                            this.submitted = {},
                            this.valueCache = {},
                            this.pendingRequest = 0,
                            this.pending = {},
                            this.invalid = {},
                            this.reset();
                        var n, r = this.groups = {};
                        e.each(this.settings.groups, function(t, n) {
                            "string" == typeof n && (n = n.split(/\s/)),
                                e.each(n, function(e, n) {
                                    r[n] = t
                                })
                        }),
                            n = this.settings.rules,
                            e.each(n, function(t, r) {
                                n[t] = e.validator.normalizeRule(r)
                            }),
                            e(this.currentForm).on("focusin.validate focusout.validate keyup.validate", ":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], [type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox'], [contenteditable]", t).on("click.validate", "select, option, [type='radio'], [type='checkbox']", t),
                        this.settings.invalidHandler && e(this.currentForm).on("invalid-form.validate", this.settings.invalidHandler),
                            e(this.currentForm).find("[required], [data-rule-required], .required").attr("aria-required", "true")
                    },
                    form: function() {
                        return this.checkForm(),
                            e.extend(this.submitted, this.errorMap),
                            this.invalid = e.extend({}, this.errorMap),
                        this.valid() || e(this.currentForm).triggerHandler("invalid-form", [this]),
                            this.showErrors(),
                            this.valid()
                    },
                    checkForm: function() {
                        this.prepareForm();
                        for (var e = 0, t = this.currentElements = this.elements(); t[e]; e++)
                            this.check(t[e]);
                        return this.valid()
                    },
                    element: function(t) {
                        var n, r, i = this.clean(t), o = this.validationTargetFor(i), a = this, s = !0;
                        return void 0 === o ? delete this.invalid[i.name] : (this.prepareElement(o),
                            this.currentElements = e(o),
                            r = this.groups[o.name],
                        r && e.each(this.groups, function(e, t) {
                            t === r && e !== o.name && (i = a.validationTargetFor(a.clean(a.findByName(e)))) && i.name in a.invalid && (a.currentElements.push(i),
                                s = s && a.check(i))
                        }),
                            n = !1 !== this.check(o),
                            s = s && n,
                            this.invalid[o.name] = !n,
                        this.numberOfInvalids() || (this.toHide = this.toHide.add(this.containers)),
                            this.showErrors(),
                            e(t).attr("aria-invalid", !n)),
                            s
                    },
                    showErrors: function(t) {
                        if (t) {
                            var n = this;
                            e.extend(this.errorMap, t),
                                this.errorList = e.map(this.errorMap, function(e, t) {
                                    return {
                                        message: e,
                                        element: n.findByName(t)[0]
                                    }
                                }),
                                this.successList = e.grep(this.successList, function(e) {
                                    return !(e.name in t)
                                })
                        }
                        this.settings.showErrors ? this.settings.showErrors.call(this, this.errorMap, this.errorList) : this.defaultShowErrors()
                    },
                    resetForm: function() {
                        e.fn.resetForm && e(this.currentForm).resetForm(),
                            this.invalid = {},
                            this.submitted = {},
                            this.prepareForm(),
                            this.hideErrors();
                        var t = this.elements().removeData("previousValue").removeAttr("aria-invalid");
                        this.resetElements(t)
                    },
                    resetElements: function(e) {
                        var t;
                        if (this.settings.unhighlight)
                            for (t = 0; e[t]; t++)
                                this.settings.unhighlight.call(this, e[t], this.settings.errorClass, ""),
                                    this.findByName(e[t].name).removeClass(this.settings.validClass);
                        else
                            e.removeClass(this.settings.errorClass).removeClass(this.settings.validClass)
                    },
                    numberOfInvalids: function() {
                        return this.objectLength(this.invalid)
                    },
                    objectLength: function(e) {
                        var t, n = 0;
                        for (t in e)
                            e[t] && n++;
                        return n
                    },
                    hideErrors: function() {
                        this.hideThese(this.toHide)
                    },
                    hideThese: function(e) {
                        e.not(this.containers).text(""),
                            this.addWrapper(e).hide()
                    },
                    valid: function() {
                        return 0 === this.size()
                    },
                    size: function() {
                        return this.errorList.length
                    },
                    focusInvalid: function() {
                        if (this.settings.focusInvalid)
                            try {
                                e(this.findLastActive() || this.errorList.length && this.errorList[0].element || []).filter(":visible").focus().trigger("focusin")
                            } catch (e) {}
                    },
                    findLastActive: function() {
                        var t = this.lastActive;
                        return t && 1 === e.grep(this.errorList, function(e) {
                            return e.element.name === t.name
                        }).length && t
                    },
                    elements: function() {
                        var t = this
                            , n = {};
                        return e(this.currentForm).find("input, select, textarea, [contenteditable]").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter(function() {
                            var r = this.name || e(this).attr("name");
                            return !r && t.settings.debug && window.console && console.error("%o has no name assigned", this),
                            this.hasAttribute("contenteditable") && (this.form = e(this).closest("form")[0]),
                            !(r in n || !t.objectLength(e(this).rules())) && (n[r] = !0,
                                !0)
                        })
                    },
                    clean: function(t) {
                        return e(t)[0]
                    },
                    errors: function() {
                        var t = this.settings.errorClass.split(" ").join(".");
                        return e(this.settings.errorElement + "." + t, this.errorContext)
                    },
                    resetInternals: function() {
                        this.successList = [],
                            this.errorList = [],
                            this.errorMap = {},
                            this.toShow = e([]),
                            this.toHide = e([])
                    },
                    reset: function() {
                        this.resetInternals(),
                            this.currentElements = e([])
                    },
                    prepareForm: function() {
                        this.reset(),
                            this.toHide = this.errors().add(this.containers)
                    },
                    prepareElement: function(e) {
                        this.reset(),
                            this.toHide = this.errorsFor(e)
                    },
                    elementValue: function(t) {
                        var n, r, i = e(t), o = t.type;
                        return "radio" === o || "checkbox" === o ? this.findByName(t.name).filter(":checked").val() : "number" === o && void 0 !== t.validity ? t.validity.badInput ? "NaN" : i.val() : (n = t.hasAttribute("contenteditable") ? i.text() : i.val(),
                            "file" === o ? "C:\\fakepath\\" === n.substr(0, 12) ? n.substr(12) : (r = n.lastIndexOf("/")) >= 0 ? n.substr(r + 1) : (r = n.lastIndexOf("\\"),
                                r >= 0 ? n.substr(r + 1) : n) : "string" == typeof n ? n.replace(/\r/g, "") : n)
                    },
                    check: function(t) {
                        t = this.validationTargetFor(this.clean(t));
                        var n, r, i, o = e(t).rules(), a = e.map(o, function(e, t) {
                            return t
                        }).length, s = !1, l = this.elementValue(t);
                        if ("function" == typeof o.normalizer) {
                            if ("string" != typeof (l = o.normalizer.call(t, l)))
                                throw new TypeError("The normalizer should return a string value.");
                            delete o.normalizer
                        }
                        for (r in o) {
                            i = {
                                method: r,
                                parameters: o[r]
                            };
                            try {
                                if ("dependency-mismatch" === (n = e.validator.methods[r].call(this, l, t, i.parameters)) && 1 === a) {
                                    s = !0;
                                    continue
                                }
                                if (s = !1,
                                    "pending" === n)
                                    return void (this.toHide = this.toHide.not(this.errorsFor(t)));
                                if (!n)
                                    return this.formatAndAdd(t, i),
                                        !1
                            } catch (e) {
                                throw this.settings.debug && window.console && console.log("Exception occurred when checking element " + t.id + ", check the '" + i.method + "' method.", e),
                                e instanceof TypeError && (e.message += ".  Exception occurred when checking element " + t.id + ", check the '" + i.method + "' method."),
                                    e
                            }
                        }
                        if (!s)
                            return this.objectLength(o) && this.successList.push(t),
                                !0
                    },
                    customDataMessage: function(t, n) {
                        return e(t).data("msg" + n.charAt(0).toUpperCase() + n.substring(1).toLowerCase()) || e(t).data("msg")
                    },
                    customMessage: function(e, t) {
                        var n = this.settings.messages[e];
                        return n && (n.constructor === String ? n : n[t])
                    },
                    findDefined: function() {
                        for (var e = 0; e < arguments.length; e++)
                            if (void 0 !== arguments[e])
                                return arguments[e]
                    },
                    defaultMessage: function(t, n) {
                        var r = this.findDefined(this.customMessage(t.name, n.method), this.customDataMessage(t, n.method), !this.settings.ignoreTitle && t.title || void 0, e.validator.messages[n.method], "<strong>Warning: No message defined for " + t.name + "</strong>")
                            , i = /\$?\{(\d+)\}/g;
                        return "function" == typeof r ? r = r.call(this, n.parameters, t) : i.test(r) && (r = e.validator.format(r.replace(i, "{$1}"), n.parameters)),
                            r
                    },
                    formatAndAdd: function(e, t) {
                        var n = this.defaultMessage(e, t);
                        this.errorList.push({
                            message: n,
                            element: e,
                            method: t.method
                        }),
                            this.errorMap[e.name] = n,
                            this.submitted[e.name] = n
                    },
                    addWrapper: function(e) {
                        return this.settings.wrapper && (e = e.add(e.parent(this.settings.wrapper))),
                            e
                    },
                    defaultShowErrors: function() {
                        var e, t, n;
                        for (e = 0; this.errorList[e]; e++)
                            n = this.errorList[e],
                            this.settings.highlight && this.settings.highlight.call(this, n.element, this.settings.errorClass, this.settings.validClass),
                                this.showLabel(n.element, n.message);
                        if (this.errorList.length && (this.toShow = this.toShow.add(this.containers)),
                                this.settings.success)
                            for (e = 0; this.successList[e]; e++)
                                this.showLabel(this.successList[e]);
                        if (this.settings.unhighlight)
                            for (e = 0,
                                     t = this.validElements(); t[e]; e++)
                                this.settings.unhighlight.call(this, t[e], this.settings.errorClass, this.settings.validClass);
                        this.toHide = this.toHide.not(this.toShow),
                            this.hideErrors(),
                            this.addWrapper(this.toShow).show()
                    },
                    validElements: function() {
                        return this.currentElements.not(this.invalidElements())
                    },
                    invalidElements: function() {
                        return e(this.errorList).map(function() {
                            return this.element
                        })
                    },
                    showLabel: function(t, n) {
                        var r, i, o, a, s = this.errorsFor(t), l = this.idOrName(t), c = e(t).attr("aria-describedby");
                        s.length ? (s.removeClass(this.settings.validClass).addClass(this.settings.errorClass),
                            s.html(n)) : (s = e("<" + this.settings.errorElement + ">").attr("id", l + "-error").addClass(this.settings.errorClass).html(n || ""),
                            r = s,
                        this.settings.wrapper && (r = s.hide().show().wrap("<" + this.settings.wrapper + "/>").parent()),
                            this.labelContainer.length ? this.labelContainer.append(r) : this.settings.errorPlacement ? this.settings.errorPlacement(r, e(t)) : r.insertAfter(t),
                            s.is("label") ? s.attr("for", l) : 0 === s.parents("label[for='" + this.escapeCssMeta(l) + "']").length && (o = s.attr("id"),
                                c ? c.match(new RegExp("\\b" + this.escapeCssMeta(o) + "\\b")) || (c += " " + o) : c = o,
                                e(t).attr("aria-describedby", c),
                            (i = this.groups[t.name]) && (a = this,
                                e.each(a.groups, function(t, n) {
                                    n === i && e("[name='" + a.escapeCssMeta(t) + "']", a.currentForm).attr("aria-describedby", s.attr("id"))
                                })))),
                        !n && this.settings.success && (s.text(""),
                            "string" == typeof this.settings.success ? s.addClass(this.settings.success) : this.settings.success(s, t)),
                            this.toShow = this.toShow.add(s)
                    },
                    errorsFor: function(t) {
                        var n = this.escapeCssMeta(this.idOrName(t))
                            , r = e(t).attr("aria-describedby")
                            , i = "label[for='" + n + "'], label[for='" + n + "'] *";
                        return r && (i = i + ", #" + this.escapeCssMeta(r).replace(/\s+/g, ", #")),
                            this.errors().filter(i)
                    },
                    escapeCssMeta: function(e) {
                        return e.replace(/([\\!"#$%&'()*+,.\/:;<=>?@\[\]^`{|}~])/g, "\\$1")
                    },
                    idOrName: function(e) {
                        return this.groups[e.name] || (this.checkable(e) ? e.name : e.id || e.name)
                    },
                    validationTargetFor: function(t) {
                        return this.checkable(t) && (t = this.findByName(t.name)),
                            e(t).not(this.settings.ignore)[0]
                    },
                    checkable: function(e) {
                        return /radio|checkbox/i.test(e.type)
                    },
                    findByName: function(t) {
                        return e(this.currentForm).find("[name='" + this.escapeCssMeta(t) + "']")
                    },
                    getLength: function(t, n) {
                        switch (n.nodeName.toLowerCase()) {
                            case "select":
                                return e("option:selected", n).length;
                            case "input":
                                if (this.checkable(n))
                                    return this.findByName(n.name).filter(":checked").length
                        }
                        return t.length
                    },
                    depend: function(e, t) {
                        return !this.dependTypes[typeof e] || this.dependTypes[typeof e](e, t)
                    },
                    dependTypes: {
                        boolean: function(e) {
                            return e
                        },
                        string: function(t, n) {
                            return !!e(t, n.form).length
                        },
                        function: function(e, t) {
                            return e(t)
                        }
                    },
                    optional: function(t) {
                        var n = this.elementValue(t);
                        return !e.validator.methods.required.call(this, n, t) && "dependency-mismatch"
                    },
                    startRequest: function(t) {
                        this.pending[t.name] || (this.pendingRequest++,
                            e(t).addClass(this.settings.pendingClass),
                            this.pending[t.name] = !0)
                    },
                    stopRequest: function(t, n) {
                        this.pendingRequest--,
                        this.pendingRequest < 0 && (this.pendingRequest = 0),
                            delete this.pending[t.name],
                            e(t).removeClass(this.settings.pendingClass),
                            n && 0 === this.pendingRequest && this.formSubmitted && this.form() ? (e(this.currentForm).submit(),
                                this.formSubmitted = !1) : !n && 0 === this.pendingRequest && this.formSubmitted && (e(this.currentForm).triggerHandler("invalid-form", [this]),
                                this.formSubmitted = !1)
                    },
                    previousValue: function(t, n) {
                        return e.data(t, "previousValue") || e.data(t, "previousValue", {
                            old: null ,
                            valid: !0,
                            message: this.defaultMessage(t, {
                                method: n
                            })
                        })
                    },
                    destroy: function() {
                        this.resetForm(),
                            e(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur")
                    }
                },
                classRuleSettings: {
                    required: {
                        required: !0
                    },
                    email: {
                        email: !0
                    },
                    url: {
                        url: !0
                    },
                    date: {
                        date: !0
                    },
                    dateISO: {
                        dateISO: !0
                    },
                    number: {
                        number: !0
                    },
                    digits: {
                        digits: !0
                    },
                    creditcard: {
                        creditcard: !0
                    }
                },
                addClassRules: function(t, n) {
                    t.constructor === String ? this.classRuleSettings[t] = n : e.extend(this.classRuleSettings, t)
                },
                classRules: function(t) {
                    var n = {}
                        , r = e(t).attr("class");
                    return r && e.each(r.split(" "), function() {
                        this in e.validator.classRuleSettings && e.extend(n, e.validator.classRuleSettings[this])
                    }),
                        n
                },
                normalizeAttributeRule: function(e, t, n, r) {
                    /min|max|step/.test(n) && (null === t || /number|range|text/.test(t)) && (r = Number(r),
                    isNaN(r) && (r = void 0)),
                        r || 0 === r ? e[n] = r : t === n && "range" !== t && (e[n] = !0)
                },
                attributeRules: function(t) {
                    var n, r, i = {}, o = e(t), a = t.getAttribute("type");
                    for (n in e.validator.methods)
                        "required" === n ? (r = t.getAttribute(n),
                        "" === r && (r = !0),
                            r = !!r) : r = o.attr(n),
                            this.normalizeAttributeRule(i, a, n, r);
                    return i.maxlength && /-1|2147483647|524288/.test(i.maxlength) && delete i.maxlength,
                        i
                },
                dataRules: function(t) {
                    var n, r, i = {}, o = e(t), a = t.getAttribute("type");
                    for (n in e.validator.methods)
                        r = o.data("rule" + n.charAt(0).toUpperCase() + n.substring(1).toLowerCase()),
                            this.normalizeAttributeRule(i, a, n, r);
                    return i
                },
                staticRules: function(t) {
                    var n = {}
                        , r = e.data(t.form, "validator");
                    return r.settings.rules && (n = e.validator.normalizeRule(r.settings.rules[t.name]) || {}),
                        n
                },
                normalizeRules: function(t, n) {
                    return e.each(t, function(r, i) {
                        if (!1 === i)
                            return void delete t[r];
                        if (i.param || i.depends) {
                            var o = !0;
                            switch (typeof i.depends) {
                                case "string":
                                    o = !!e(i.depends, n.form).length;
                                    break;
                                case "function":
                                    o = i.depends.call(n, n)
                            }
                            o ? t[r] = void 0 === i.param || i.param : (e.data(n.form, "validator").resetElements(e(n)),
                                delete t[r])
                        }
                    }),
                        e.each(t, function(r, i) {
                            t[r] = e.isFunction(i) && "normalizer" !== r ? i(n) : i
                        }),
                        e.each(["minlength", "maxlength"], function() {
                            t[this] && (t[this] = Number(t[this]))
                        }),
                        e.each(["rangelength", "range"], function() {
                            var n;
                            t[this] && (e.isArray(t[this]) ? t[this] = [Number(t[this][0]), Number(t[this][1])] : "string" == typeof t[this] && (n = t[this].replace(/[\[\]]/g, "").split(/[\s,]+/),
                                t[this] = [Number(n[0]), Number(n[1])]))
                        }),
                    e.validator.autoCreateRanges && (null != t.min && null != t.max && (t.range = [t.min, t.max],
                        delete t.min,
                        delete t.max),
                    null != t.minlength && null != t.maxlength && (t.rangelength = [t.minlength, t.maxlength],
                        delete t.minlength,
                        delete t.maxlength)),
                        t
                },
                normalizeRule: function(t) {
                    if ("string" == typeof t) {
                        var n = {};
                        e.each(t.split(/\s/), function() {
                            n[this] = !0
                        }),
                            t = n
                    }
                    return t
                },
                addMethod: function(t, n, r) {
                    e.validator.methods[t] = n,
                        e.validator.messages[t] = void 0 !== r ? r : e.validator.messages[t],
                    n.length < 3 && e.validator.addClassRules(t, e.validator.normalizeRule(t))
                },
                methods: {
                    required: function(t, n, r) {
                        if (!this.depend(r, n))
                            return "dependency-mismatch";
                        if ("select" === n.nodeName.toLowerCase()) {
                            var i = e(n).val();
                            return i && i.length > 0
                        }
                        return this.checkable(n) ? this.getLength(t, n) > 0 : t.length > 0
                    },
                    email: function(e, t) {
                        return this.optional(t) || /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(e)
                    },
                    url: function(e, t) {
                        return this.optional(t) || /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[\/?#]\S*)?$/i.test(e)
                    },
                    date: function(e, t) {
                        return this.optional(t) || !/Invalid|NaN/.test(new Date(e).toString())
                    },
                    dateISO: function(e, t) {
                        return this.optional(t) || /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(e)
                    },
                    number: function(e, t) {
                        return this.optional(t) || /^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(e)
                    },
                    digits: function(e, t) {
                        return this.optional(t) || /^\d+$/.test(e)
                    },
                    minlength: function(t, n, r) {
                        var i = e.isArray(t) ? t.length : this.getLength(t, n);
                        return this.optional(n) || i >= r
                    },
                    maxlength: function(t, n, r) {
                        var i = e.isArray(t) ? t.length : this.getLength(t, n);
                        return this.optional(n) || i <= r
                    },
                    rangelength: function(t, n, r) {
                        var i = e.isArray(t) ? t.length : this.getLength(t, n);
                        return this.optional(n) || i >= r[0] && i <= r[1]
                    },
                    min: function(e, t, n) {
                        return this.optional(t) || e >= n
                    },
                    max: function(e, t, n) {
                        return this.optional(t) || e <= n
                    },
                    range: function(e, t, n) {
                        return this.optional(t) || e >= n[0] && e <= n[1]
                    },
                    step: function(t, n, r) {
                        var i = e(n).attr("type")
                            , o = "Step attribute on input type " + i + " is not supported."
                            , a = ["text", "number", "range"]
                            , s = new RegExp("\\b" + i + "\\b");
                        if (i && !s.test(a.join()))
                            throw new Error(o);
                        return this.optional(n) || t % r == 0
                    },
                    equalTo: function(t, n, r) {
                        var i = e(r);
                        return this.settings.onfocusout && i.not(".validate-equalTo-blur").length && i.addClass("validate-equalTo-blur").on("blur.validate-equalTo", function() {
                            e(n).valid()
                        }),
                        t === i.val()
                    },
                    remote: function(t, n, r, i) {
                        if (this.optional(n))
                            return "dependency-mismatch";
                        i = "string" == typeof i && i || "remote";
                        var o, a, s, l = this.previousValue(n, i);
                        return this.settings.messages[n.name] || (this.settings.messages[n.name] = {}),
                            l.originalMessage = l.originalMessage || this.settings.messages[n.name][i],
                            this.settings.messages[n.name][i] = l.message,
                            r = "string" == typeof r && {
                                url: r
                            } || r,
                            s = e.param(e.extend({
                                data: t
                            }, r.data)),
                            l.old === s ? l.valid : (l.old = s,
                                o = this,
                                this.startRequest(n),
                                a = {},
                                a[n.name] = t,
                                e.ajax(e.extend(!0, {
                                    mode: "abort",
                                    port: "validate" + n.name,
                                    dataType: "json",
                                    data: a,
                                    context: o.currentForm,
                                    success: function(e) {
                                        var r, a, s, c = !0 === e || "true" === e;
                                        o.settings.messages[n.name][i] = l.originalMessage,
                                            c ? (s = o.formSubmitted,
                                                o.resetInternals(),
                                                o.toHide = o.errorsFor(n),
                                                o.formSubmitted = s,
                                                o.successList.push(n),
                                                o.invalid[n.name] = !1,
                                                o.showErrors()) : (r = {},
                                                a = e || o.defaultMessage(n, {
                                                    method: i,
                                                    parameters: t
                                                }),
                                                r[n.name] = l.message = a,
                                                o.invalid[n.name] = !0,
                                                o.showErrors(r)),
                                            l.valid = c,
                                            o.stopRequest(n, c)
                                    }
                                }, r)),
                                "pending")
                    }
                }
            });
        var t, n = {};
        e.ajaxPrefilter ? e.ajaxPrefilter(function(e, t, r) {
            var i = e.port;
            "abort" === e.mode && (n[i] && n[i].abort(),
                n[i] = r)
        }) : (t = e.ajax,
                e.ajax = function(r) {
                    var i = ("mode"in r ? r : e.ajaxSettings).mode
                        , o = ("port"in r ? r : e.ajaxSettings).port;
                    return "abort" === i ? (n[o] && n[o].abort(),
                        n[o] = t.apply(this, arguments),
                        n[o]) : t.apply(this, arguments)
                }
        )
    }),
    function(e) {
        e.fn.viewportChecker = function(t) {
            var n = {
                classToAdd: "visible",
                classToRemove: "invisible",
                classToAddForFullView: "full-visible",
                removeClassAfterAnimation: !1,
                offset: 100,
                repeat: !1,
                invertBottomOffset: !0,
                callbackFunction: function(e, t) {},
                scrollHorizontal: !1,
                scrollBox: window
            };
            e.extend(n, t);
            var r = this
                , i = {
                height: e(n.scrollBox).height(),
                width: e(n.scrollBox).width()
            }
                , o = -1 != navigator.userAgent.toLowerCase().indexOf("webkit") || -1 != navigator.userAgent.toLowerCase().indexOf("windows phone") ? "body" : "html";
            return this.checkElements = function() {
                var t, a;
                n.scrollHorizontal ? (t = e(o).scrollLeft(),
                    a = t + i.width) : (t = e(o).scrollTop(),
                    a = t + i.height),
                    r.each(function() {
                        var r = e(this)
                            , o = {}
                            , s = {};
                        if (r.data("vp-add-class") && (s.classToAdd = r.data("vp-add-class")),
                            r.data("vp-remove-class") && (s.classToRemove = r.data("vp-remove-class")),
                            r.data("vp-add-class-full-view") && (s.classToAddForFullView = r.data("vp-add-class-full-view")),
                            r.data("vp-keep-add-class") && (s.removeClassAfterAnimation = r.data("vp-remove-after-animation")),
                            r.data("vp-offset") && (s.offset = r.data("vp-offset")),
                            r.data("vp-repeat") && (s.repeat = r.data("vp-repeat")),
                            r.data("vp-scrollHorizontal") && (s.scrollHorizontal = r.data("vp-scrollHorizontal")),
                            r.data("vp-invertBottomOffset") && (s.scrollHorizontal = r.data("vp-invertBottomOffset")),
                                e.extend(o, n),
                                e.extend(o, s),
                            !r.data("vp-animated") || o.repeat) {
                            String(o.offset).indexOf("%") > 0 && (o.offset = parseInt(o.offset) / 100 * i.height);
                            var l = o.scrollHorizontal ? r.offset().left : r.offset().top
                                , c = o.scrollHorizontal ? l + r.width() : l + r.height()
                                , u = Math.round(l) + o.offset
                                , d = o.scrollHorizontal ? u + r.width() : u + r.height();
                            o.invertBottomOffset && (d -= 2 * o.offset),
                                u < a && d > t ? (r.removeClass(o.classToRemove),
                                    r.addClass(o.classToAdd),
                                    o.callbackFunction(r, "add"),
                                    c <= a && l >= t ? r.addClass(o.classToAddForFullView) : r.removeClass(o.classToAddForFullView),
                                    r.data("vp-animated", !0),
                                o.removeClassAfterAnimation || r.one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend", function() {
                                    r.removeClass(o.classToAdd)
                                })) : r.hasClass(o.classToAdd) && o.repeat && (r.removeClass(o.classToAdd + " " + o.classToAddForFullView),
                                    o.callbackFunction(r, "remove"),
                                    r.data("vp-animated", !1))
                        }
                    })
            }
                ,
            ("ontouchstart"in window || "onmsgesturechange"in window) && e(document).bind("touchmove MSPointerMove pointermove", this.checkElements),
                e(n.scrollBox).bind("load scroll", this.checkElements),
                e(window).resize(function(t) {
                    i = {
                        height: e(n.scrollBox).height(),
                        width: e(n.scrollBox).width()
                    },
                        r.checkElements()
                }),
                this.checkElements(),
                this
        }
    }(jQuery),
    function() {
        "use strict";
        $(function() {
            $("[data-page-scroller]").each(function() {
                var e = $(this)
                    , t = e.data("page-scroller");
                e.click(function(e) {
                    e.preventDefault(),
                        $("html, body").animate({
                            scrollTop: $(t).offset().top
                        }, 1200)
                }),
                    e.css("cursor", "pointer")
            })
        })
    }(),
    function() {
        "use strict";
        $(function() {
            var e = $("[data-readme-formatter]");
            if (1 == e.length) {
                var t = e.find("[data-readme-heading]")
                    , n = e.find("[data-readme-toc]")
                    , r = e.find("[data-readme-body]")
                    , i = $();
                1 !== t.length && console.error("must have one `data-readme-heading`"),
                1 !== n.length && console.error("must have one `data-readme-toc`"),
                1 !== r.length && console.error("must have one `data-readme-body`"),
                    e.hide(),
                    $('<div class="expander-end"></div>').appendTo(r),
                    r.find("h1,h2,h3").each(function(e) {
                        var r = $(this);
                        switch (r.prop("nodeName").toLowerCase()) {
                            case "h1":
                                r.hide().detach().appendTo(t).fadeIn();
                                break;
                            case "h2":
                                $('<li><a href="#section-' + e + '">' + r.text() + "</a></li>").click(function(e) {
                                    e.preventDefault(),
                                        $("html, body").animate({
                                            scrollTop: r.offset().top
                                        }, 1200)
                                }).hide().appendTo(n).fadeIn();
                                break;
                            case "h3":
                                var o = $('<a href class="expander expander-end">' + r.text() + "</a>");
                                r.replaceWith(o),
                                    i.push(o)
                        }
                        r.addClass("expander-end")
                    }),
                    i.each(function(e) {
                        var t = $(this)
                            , n = t.nextUntil(".expander-end");
                        n.addClass("expandable").hide(),
                            t.click(function(e) {
                                e.preventDefault(),
                                    n.animate({
                                        height: "toggle",
                                        opacity: "toggle"
                                    })
                            })
                    }),
                    e.show()
            }
        })
    }(),
    $(document).ready(function() {
        "use strict";
        $(document).on("opening", ".success_video", function() {
            $("#student_video").attr("src", "https://player.vimeo.com/video/157236401?autoplay=1?color=00adef&title=0&byline=0&portrait=0")
        }),
            $(document).on("closing", ".success_video", function() {
                $("#student_video").attr("src", "")
            }),
            $(".close_banner").click(function(e) {
                $(".top_banner, .banner").slideUp(),
                    $(".page-github.success").css("margin-top", "0px"),
                    e.preventDefault()
            }),
            $(".nav_toggle").unbind().click(function(e) {
                $(this).parent().toggleClass("nav--on"),
                    e.preventDefault()
            }),
            $(".footer_nav_toggle h3").unbind().click(function(e) {
                $(this).parent().toggleClass("nav--on"),
                    e.preventDefault()
            }),
            $(".filter_toggle").click(function(e) {
                $(".fields_contain").toggleClass("filter--on"),
                    e.preventDefault()
            }),
            $(".view_toggle .grid").click(function(e) {
                $(this).addClass("active"),
                    $(".view_toggle .list").removeClass("active"),
                    $(".category_block").removeClass("list--on"),
                    $(".category_block").addClass("grid--on"),
                    e.preventDefault()
            }),
            $(".view_toggle .list").click(function(e) {
                $(this).addClass("active"),
                    $(".view_toggle .grid").removeClass("active"),
                    $(".category_block").removeClass("grid--on"),
                    $(".category_block").addClass("list--on"),
                    e.preventDefault()
            }),
            $(".signup_tab a").click(function(e) {
                $(".signup_contain").removeClass("signin--on"),
                    $(".signup_contain").addClass("signup--on"),
                    e.preventDefault()
            }),
            $(".signin_tab a").click(function(e) {
                $(".signup_contain").removeClass("signup--on"),
                    $(".signup_contain").addClass("signin--on"),
                    e.preventDefault()
            }),
            $(".what_get_tab a").click(function(e) {
                $(".tabs_contain").removeClass("what_is--on"),
                    $(".tabs_contain").addClass("what_get--on"),
                    e.preventDefault()
            }),
            $(".what_is_tab a").click(function(e) {
                $(".tabs_contain").removeClass("what_get--on"),
                    $(".tabs_contain").addClass("what_is--on"),
                    e.preventDefault()
            }),
            $(".message_toggle").click(function(e) {
                $(".message_contain").addClass("message--on"),
                    e.preventDefault()
            }),
            $(".message_close").click(function(e) {
                $(".message_contain").removeClass("message--on"),
                    e.preventDefault()
            }),
            $(".enroll_next").click(function(e) {
                $(".enroll_form").addClass("step_two--on"),
                    e.preventDefault()
            }),
            $(".credit_card").click(function(e) {
                $(".credit_card_type").addClass("visa"),
                    e.preventDefault()
            }),
            $(document).on("click", function(e) {
                $(e.target).hasClass("tooltip") || $(".tooltip").removeClass("tooltip--on")
            }),
            $(".tooltip").click(function(e) {
                $(this).toggleClass("tooltip--on"),
                    e.preventDefault()
            }),
            $(".scroll_pane").each(function() {
                $(this).jScrollPane({
                    showArrows: $(this).is(".arrow"),
                    hideFocus: !0,
                    animateScroll: !0,
                    animateDuration: 200,
                    keyboardSpeed: 120
                });
                var e, t = $(this).data("jsp");
                $(window).bind("resize", function() {
                    e || (e = setTimeout(function() {
                        t.reinitialise(),
                            e = null
                    }, 50))
                })
            }),
            $(window).bind("load resize", function() {
                $(".tooltip_content").each(function() {
                    var e = $(this).offset()
                        , t = $(this).width() + 24;
                    $(window).width() - e.left < t ? $(this).parent().addClass("right") : $(this).parent().removeClass("right"),
                        e.left < 24 ? $(this).parent().addClass("left") : $(this).parent().removeClass("left")
                })
            })
    }),
    function() {
        "use strict";
        $(function() {
            "undefined" == typeof analytics ? console.error("Segment analytics is disabled.") : $("[data-segment-track]").each(function() {
                var e = $(this)
                    , t = e.data("segment-track");
                if ("" === t && console.error("No Segment event specified."),
                    "Course Trailer Played" === t) {
                    var n = e.data("course-key");
                    void 0 === n ? console.error("No course key defined.") : e.click(function() {
                        analytics.track(t, {
                            course_key: n
                        })
                    })
                }
                if ("Nanodegree Trailer Played" === t) {
                    var r = e.data("degree-key");
                    void 0 === r ? console.error("No degree key defined.") : e.click(function() {
                        analytics.track(t, {
                            degree_key: r
                        })
                    })
                }
                if ("Featured Moustache" === t && (e.find("a:not(.close_banner)").click(function() {
                        analytics.track("CTA Clicked", {
                            moustache_text: e.text().trim(),
                            moustache_link: $(this).attr("href")
                        })
                    }),
                        e.children("a.close_banner").click(function() {
                            analytics.track("CTA Dismissed", {
                                moustache_text: e.text().trim(),
                                moustache_link: $(this).attr("href")
                            })
                        })),
                    "Course Interested" === t)
                    e.click(function() {
                        var e = $(this).parents("form:first")
                            , t = {
                            context: e.find("#context").val(),
                            name: e.find("#name").val(),
                            email: e.find("#email").val()
                        };
                        analytics.track("Course Interested", t)
                    });
                else {
                    var i = e.data("segment-properties")
                        , o = e.data("segment-options");
                    e.click(function() {
                        analytics.track(t, i, o)
                    })
                }
            })
        })
    }(),
    function e(t, n, r) {
        function i(a, s) {
            if (!n[a]) {
                if (!t[a]) {
                    var l = "function" == typeof require && require;
                    if (!s && l)
                        return l(a, !0);
                    if (o)
                        return o(a, !0);
                    throw new Error("Cannot find module '" + a + "'")
                }
                var c = n[a] = {
                    exports: {}
                };
                t[a][0].call(c.exports, function(e) {
                    var n = t[a][1][e];
                    return i(n || e)
                }, c, c.exports, e, t, n, r)
            }
            return n[a].exports
        }
        for (var o = "function" == typeof require && require, a = 0; a < r.length; a++)
            i(r[a]);
        return i
    }({
        1: [function(e, t, n) {
            function r(e) {
                this.message = e
            }
            function i(e) {
                var t = String(e).replace(/=+$/, "");
                if (t.length % 4 == 1)
                    throw new r("'atob' failed: The string to be decoded is not correctly encoded.");
                for (var n, i, a = 0, s = 0, l = ""; i = t.charAt(s++); ~i && (n = a % 4 ? 64 * n + i : i,
                a++ % 4) ? l += String.fromCharCode(255 & n >> (-2 * a & 6)) : 0)
                    i = o.indexOf(i);
                return l
            }
            var o = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
            r.prototype = new Error,
                r.prototype.name = "InvalidCharacterError",
                t.exports = "undefined" != typeof window && window.atob || i
        }
            , {}],
        2: [function(e, t, n) {
            function r(e) {
                return decodeURIComponent(i(e).replace(/(.)/g, function(e, t) {
                    var n = t.charCodeAt(0).toString(16).toUpperCase();
                    return n.length < 2 && (n = "0" + n),
                    "%" + n
                }))
            }
            var i = e("./atob");
            t.exports = function(e) {
                var t = e.replace(/-/g, "+").replace(/_/g, "/");
                switch (t.length % 4) {
                    case 0:
                        break;
                    case 2:
                        t += "==";
                        break;
                    case 3:
                        t += "=";
                        break;
                    default:
                        throw "Illegal base64url string!"
                }
                try {
                    return r(t)
                } catch (e) {
                    return i(t)
                }
            }
        }
            , {
                "./atob": 1
            }],
        3: [function(e, t, n) {
            "use strict";
            var r = e("./base64_url_decode");
            t.exports = function(e) {
                if (!e)
                    throw new Error("Invalid token specified");
                return JSON.parse(r(e.split(".")[1]))
            }
        }
            , {
                "./base64_url_decode": 2
            }],
        4: [function(e, t, n) {
            var r = "undefined" != typeof self ? self : "undefined" != typeof window ? window : {}
                , i = e("./lib/index");
            "function" == typeof r.window.define && r.window.define.amd ? r.window.define("jwt_decode", function() {
                return i
            }) : r.window && (r.window.jwt_decode = i)
        }
            , {
                "./lib/index": 3
            }]
    }, {}, [4]),
    function(e, t, n) {
        "use strict";
        !function e(t, n, r) {
            function i(a, s) {
                if (!n[a]) {
                    if (!t[a]) {
                        var l = "function" == typeof require && require;
                        if (!s && l)
                            return l(a, !0);
                        if (o)
                            return o(a, !0);
                        var c = new Error("Cannot find module '" + a + "'");
                        throw c.code = "MODULE_NOT_FOUND",
                            c
                    }
                    var u = n[a] = {
                        exports: {}
                    };
                    t[a][0].call(u.exports, function(e) {
                        var n = t[a][1][e];
                        return i(n || e)
                    }, u, u.exports, e, t, n, r)
                }
                return n[a].exports
            }
            for (var o = "function" == typeof require && require, a = 0; a < r.length; a++)
                i(r[a]);
            return i
        }({
            1: [function(r, i, o) {
                var a = function(e) {
                    return e && e.__esModule ? e : {
                        default: e
                    }
                };
                Object.defineProperty(o, "__esModule", {
                    value: !0
                });
                var s, l, c, u, d = r("./modules/handle-dom"), f = r("./modules/utils"), p = r("./modules/handle-swal-dom"), h = r("./modules/handle-click"), m = r("./modules/handle-key"), g = a(m), v = r("./modules/default-params"), y = a(v), b = r("./modules/set-params"), w = a(b);
                o.default = c = u = function() {
                    function r(e) {
                        var t = i;
                        return t[e] === n ? y.default[e] : t[e]
                    }
                    var i = arguments[0];
                    if (d.addClass(t.body, "stop-scrolling"),
                            p.resetInput(),
                        i === n)
                        return f.logStr("SweetAlert expects at least 1 attribute!"),
                            !1;
                    var o = f.extend({}, y.default);
                    switch (typeof i) {
                        case "string":
                            o.title = i,
                                o.text = arguments[1] || "",
                                o.type = arguments[2] || "";
                            break;
                        case "object":
                            if (i.title === n)
                                return f.logStr('Missing "title" argument!'),
                                    !1;
                            o.title = i.title;
                            for (var a in y.default)
                                o[a] = r(a);
                            o.confirmButtonText = o.showCancelButton ? "Confirm" : y.default.confirmButtonText,
                                o.confirmButtonText = r("confirmButtonText"),
                                o.doneFunction = arguments[1] || null ;
                            break;
                        default:
                            return f.logStr('Unexpected type of argument! Expected "string" or "object", got ' + typeof i),
                                !1
                    }
                    w.default(o),
                        p.fixVerticalPosition(),
                        p.openModal(arguments[1]);
                    for (var c = p.getModal(), m = c.querySelectorAll("button"), v = ["onclick", "onmouseover", "onmouseout", "onmousedown", "onmouseup", "onfocus"], b = function(e) {
                        return h.handleButton(e, o, c)
                    }, x = 0; x < m.length; x++)
                        for (var C = 0; C < v.length; C++) {
                            var k = v[C];
                            m[x][k] = b
                        }
                    p.getOverlay().onclick = b,
                        s = e.onkeydown;
                    var T = function(e) {
                        return g.default(e, o, c)
                    };
                    e.onkeydown = T,
                        e.onfocus = function() {
                            setTimeout(function() {
                                l !== n && (l.focus(),
                                    l = n)
                            }, 0)
                        }
                        ,
                        u.enableButtons()
                }
                    ,
                    c.setDefaults = u.setDefaults = function(e) {
                        if (!e)
                            throw new Error("userParams is required");
                        if ("object" != typeof e)
                            throw new Error("userParams has to be a object");
                        f.extend(y.default, e)
                    }
                    ,
                    c.close = u.close = function() {
                        var r = p.getModal();
                        d.fadeOut(p.getOverlay(), 5),
                            d.fadeOut(r, 5),
                            d.removeClass(r, "showSweetAlert"),
                            d.addClass(r, "hideSweetAlert"),
                            d.removeClass(r, "visible");
                        var i = r.querySelector(".sa-icon.sa-success");
                        d.removeClass(i, "animate"),
                            d.removeClass(i.querySelector(".sa-tip"), "animateSuccessTip"),
                            d.removeClass(i.querySelector(".sa-long"), "animateSuccessLong");
                        var o = r.querySelector(".sa-icon.sa-error");
                        d.removeClass(o, "animateErrorIcon"),
                            d.removeClass(o.querySelector(".sa-x-mark"), "animateXMark");
                        var a = r.querySelector(".sa-icon.sa-warning");
                        return d.removeClass(a, "pulseWarning"),
                            d.removeClass(a.querySelector(".sa-body"), "pulseWarningIns"),
                            d.removeClass(a.querySelector(".sa-dot"), "pulseWarningIns"),
                            setTimeout(function() {
                                var e = r.getAttribute("data-custom-class");
                                d.removeClass(r, e)
                            }, 300),
                            d.removeClass(t.body, "stop-scrolling"),
                            e.onkeydown = s,
                        e.previousActiveElement && e.previousActiveElement.focus(),
                            l = n,
                            clearTimeout(r.timeout),
                            !0
                    }
                    ,
                    c.showInputError = u.showInputError = function(e) {
                        var t = p.getModal()
                            , n = t.querySelector(".sa-input-error");
                        d.addClass(n, "show");
                        var r = t.querySelector(".sa-error-container");
                        d.addClass(r, "show"),
                            r.querySelector("p").innerHTML = e,
                            setTimeout(function() {
                                c.enableButtons()
                            }, 1),
                            t.querySelector("input").focus()
                    }
                    ,
                    c.resetInputError = u.resetInputError = function(e) {
                        if (e && 13 === e.keyCode)
                            return !1;
                        var t = p.getModal()
                            , n = t.querySelector(".sa-input-error");
                        d.removeClass(n, "show");
                        var r = t.querySelector(".sa-error-container");
                        d.removeClass(r, "show")
                    }
                    ,
                    c.disableButtons = u.disableButtons = function() {
                        var e = p.getModal()
                            , t = e.querySelector("button.confirm")
                            , n = e.querySelector("button.cancel");
                        t.disabled = !0,
                            n.disabled = !0
                    }
                    ,
                    c.enableButtons = u.enableButtons = function() {
                        var e = p.getModal()
                            , t = e.querySelector("button.confirm")
                            , n = e.querySelector("button.cancel");
                        t.disabled = !1,
                            n.disabled = !1
                    }
                    ,
                    void 0 !== e ? e.sweetAlert = e.swal = c : f.logStr("SweetAlert is a frontend module!"),
                    i.exports = o.default
            }
                , {
                    "./modules/default-params": 2,
                    "./modules/handle-click": 3,
                    "./modules/handle-dom": 4,
                    "./modules/handle-key": 5,
                    "./modules/handle-swal-dom": 6,
                    "./modules/set-params": 8,
                    "./modules/utils": 9
                }],
            2: [function(e, t, n) {
                Object.defineProperty(n, "__esModule", {
                    value: !0
                });
                var r = {
                    title: "",
                    text: "",
                    type: null ,
                    allowOutsideClick: !1,
                    showConfirmButton: !0,
                    showCancelButton: !1,
                    closeOnConfirm: !0,
                    closeOnCancel: !0,
                    confirmButtonText: "OK",
                    confirmButtonColor: "#8CD4F5",
                    cancelButtonText: "Cancel",
                    imageUrl: null ,
                    imageSize: null ,
                    timer: null ,
                    customClass: "",
                    html: !1,
                    animation: !0,
                    allowEscapeKey: !0,
                    inputType: "text",
                    inputPlaceholder: "",
                    inputValue: "",
                    showLoaderOnConfirm: !1
                };
                n.default = r,
                    t.exports = n.default
            }
                , {}],
            3: [function(t, n, r) {
                Object.defineProperty(r, "__esModule", {
                    value: !0
                });
                var i = t("./utils")
                    , o = (t("./handle-swal-dom"),
                    t("./handle-dom"))
                    , a = function(t, n, r) {
                    function a(e) {
                        h && n.confirmButtonColor && (p.style.backgroundColor = e)
                    }
                    var c, u, d, f = t || e.event, p = f.target || f.srcElement, h = -1 !== p.className.indexOf("confirm"), m = -1 !== p.className.indexOf("sweet-overlay"), g = o.hasClass(r, "visible"), v = n.doneFunction && "true" === r.getAttribute("data-has-done-function");
                    switch (h && n.confirmButtonColor && (c = n.confirmButtonColor,
                        u = i.colorLuminance(c, -.04),
                        d = i.colorLuminance(c, -.14)),
                        f.type) {
                        case "mouseover":
                            a(u);
                            break;
                        case "mouseout":
                            a(c);
                            break;
                        case "mousedown":
                            a(d);
                            break;
                        case "mouseup":
                            a(u);
                            break;
                        case "focus":
                            var y = r.querySelector("button.confirm")
                                , b = r.querySelector("button.cancel");
                            h ? b.style.boxShadow = "none" : y.style.boxShadow = "none";
                            break;
                        case "click":
                            var w = r === p
                                , x = o.isDescendant(r, p);
                            if (!w && !x && g && !n.allowOutsideClick)
                                break;
                            h && v && g ? s(r, n) : v && g || m ? l(r, n) : o.isDescendant(r, p) && "BUTTON" === p.tagName && sweetAlert.close()
                    }
                }
                    , s = function(e, t) {
                    var n = !0;
                    o.hasClass(e, "show-input") && ((n = e.querySelector("input").value) || (n = "")),
                        t.doneFunction(n),
                    t.closeOnConfirm && sweetAlert.close(),
                    t.showLoaderOnConfirm && sweetAlert.disableButtons()
                }
                    , l = function(e, t) {
                    var n = String(t.doneFunction).replace(/\s/g, "");
                    "function(" === n.substring(0, 9) && ")" !== n.substring(9, 10) && t.doneFunction(!1),
                    t.closeOnCancel && sweetAlert.close()
                };
                r.default = {
                    handleButton: a,
                    handleConfirm: s,
                    handleCancel: l
                },
                    n.exports = r.default
            }
                , {
                    "./handle-dom": 4,
                    "./handle-swal-dom": 6,
                    "./utils": 9
                }],
            4: [function(n, r, i) {
                Object.defineProperty(i, "__esModule", {
                    value: !0
                });
                var o = function(e, t) {
                    return new RegExp(" " + t + " ").test(" " + e.className + " ")
                }
                    , a = function(e, t) {
                    o(e, t) || (e.className += " " + t)
                }
                    , s = function(e, t) {
                    var n = " " + e.className.replace(/[\t\r\n]/g, " ") + " ";
                    if (o(e, t)) {
                        for (; n.indexOf(" " + t + " ") >= 0; )
                            n = n.replace(" " + t + " ", " ");
                        e.className = n.replace(/^\s+|\s+$/g, "")
                    }
                }
                    , l = function(e) {
                    var n = t.createElement("div");
                    return n.appendChild(t.createTextNode(e)),
                        n.innerHTML
                }
                    , c = function(e) {
                    e.style.opacity = "",
                        e.style.display = "block"
                }
                    , u = function(e) {
                    if (e && !e.length)
                        return c(e);
                    for (var t = 0; t < e.length; ++t)
                        c(e[t])
                }
                    , d = function(e) {
                    e.style.opacity = "",
                        e.style.display = "none"
                }
                    , f = function(e) {
                    if (e && !e.length)
                        return d(e);
                    for (var t = 0; t < e.length; ++t)
                        d(e[t])
                }
                    , p = function(e, t) {
                    for (var n = t.parentNode; null !== n; ) {
                        if (n === e)
                            return !0;
                        n = n.parentNode
                    }
                    return !1
                }
                    , h = function(e) {
                    e.style.left = "-9999px",
                        e.style.display = "block";
                    var t, n = e.clientHeight;
                    return t = "undefined" != typeof getComputedStyle ? parseInt(getComputedStyle(e).getPropertyValue("padding-top"), 10) : parseInt(e.currentStyle.padding),
                        e.style.left = "",
                        e.style.display = "none",
                    "-" + parseInt((n + t) / 2) + "px"
                }
                    , m = function(e, t) {
                    if (+e.style.opacity < 1) {
                        t = t || 16,
                            e.style.opacity = 0,
                            e.style.display = "block";
                        var n = +new Date
                            , r = function(e) {
                            function t() {
                                return e.apply(this, arguments)
                            }
                            return t.toString = function() {
                                return e.toString()
                            }
                                ,
                                t
                        }(function() {
                            e.style.opacity = +e.style.opacity + (new Date - n) / 100,
                                n = +new Date,
                            +e.style.opacity < 1 && setTimeout(r, t)
                        });
                        r()
                    }
                    e.style.display = "block"
                }
                    , g = function(e, t) {
                    t = t || 16,
                        e.style.opacity = 1;
                    var n = +new Date
                        , r = function(e) {
                        function t() {
                            return e.apply(this, arguments)
                        }
                        return t.toString = function() {
                            return e.toString()
                        }
                            ,
                            t
                    }(function() {
                        e.style.opacity = +e.style.opacity - (new Date - n) / 100,
                            n = +new Date,
                            +e.style.opacity > 0 ? setTimeout(r, t) : e.style.display = "none"
                    });
                    r()
                }
                    , v = function(n) {
                    if ("function" == typeof MouseEvent) {
                        var r = new MouseEvent("click",{
                            view: e,
                            bubbles: !1,
                            cancelable: !0
                        });
                        n.dispatchEvent(r)
                    } else if (t.createEvent) {
                        var i = t.createEvent("MouseEvents");
                        i.initEvent("click", !1, !1),
                            n.dispatchEvent(i)
                    } else
                        t.createEventObject ? n.fireEvent("onclick") : "function" == typeof n.onclick && n.onclick()
                }
                    , y = function(t) {
                    "function" == typeof t.stopPropagation ? (t.stopPropagation(),
                        t.preventDefault()) : e.event && e.event.hasOwnProperty("cancelBubble") && (e.event.cancelBubble = !0)
                };
                i.hasClass = o,
                    i.addClass = a,
                    i.removeClass = s,
                    i.escapeHtml = l,
                    i._show = c,
                    i.show = u,
                    i._hide = d,
                    i.hide = f,
                    i.isDescendant = p,
                    i.getTopMargin = h,
                    i.fadeIn = m,
                    i.fadeOut = g,
                    i.fireClick = v,
                    i.stopEventPropagation = y
            }
                , {}],
            5: [function(t, r, i) {
                Object.defineProperty(i, "__esModule", {
                    value: !0
                });
                var o = t("./handle-dom")
                    , a = t("./handle-swal-dom")
                    , s = function(t, r, i) {
                    var s = t || e.event
                        , l = s.keyCode || s.which
                        , c = i.querySelector("button.confirm")
                        , u = i.querySelector("button.cancel")
                        , d = i.querySelectorAll("button[tabindex]");
                    if (-1 !== [9, 13, 32, 27].indexOf(l)) {
                        for (var f = s.target || s.srcElement, p = -1, h = 0; h < d.length; h++)
                            if (f === d[h]) {
                                p = h;
                                break
                            }
                        9 === l ? (f = -1 === p ? c : p === d.length - 1 ? d[0] : d[p + 1],
                            o.stopEventPropagation(s),
                            f.focus(),
                        r.confirmButtonColor && a.setFocusStyle(f, r.confirmButtonColor)) : 13 === l ? ("INPUT" === f.tagName && (f = c,
                            c.focus()),
                            f = -1 === p ? c : n) : 27 === l && !0 === r.allowEscapeKey ? (f = u,
                            o.fireClick(f, s)) : f = n
                    }
                };
                i.default = s,
                    r.exports = i.default
            }
                , {
                    "./handle-dom": 4,
                    "./handle-swal-dom": 6
                }],
            6: [function(n, r, i) {
                var o = function(e) {
                    return e && e.__esModule ? e : {
                        default: e
                    }
                };
                Object.defineProperty(i, "__esModule", {
                    value: !0
                });
                var a = n("./utils")
                    , s = n("./handle-dom")
                    , l = n("./default-params")
                    , c = o(l)
                    , u = n("./injected-html")
                    , d = o(u)
                    , f = function() {
                    var e = t.createElement("div");
                    for (e.innerHTML = d.default; e.firstChild; )
                        t.body.appendChild(e.firstChild)
                }
                    , p = function(e) {
                    function t() {
                        return e.apply(this, arguments)
                    }
                    return t.toString = function() {
                        return e.toString()
                    }
                        ,
                        t
                }(function() {
                    var e = t.querySelector(".sweet-alert");
                    return e || (f(),
                        e = p()),
                        e
                })
                    , h = function() {
                    var e = p();
                    return e ? e.querySelector("input") : void 0
                }
                    , m = function() {
                    return t.querySelector(".sweet-overlay")
                }
                    , g = function(e, t) {
                    var n = a.hexToRgb(t);
                    e.style.boxShadow = "0 0 2px rgba(" + n + ", 0.8), inset 0 0 0 1px rgba(0, 0, 0, 0.05)"
                }
                    , v = function(n) {
                    var r = p();
                    s.fadeIn(m(), 10),
                        s.show(r),
                        s.addClass(r, "showSweetAlert"),
                        s.removeClass(r, "hideSweetAlert"),
                        e.previousActiveElement = t.activeElement,
                        r.querySelector("button.confirm").focus(),
                        setTimeout(function() {
                            s.addClass(r, "visible")
                        }, 500);
                    var i = r.getAttribute("data-timer");
                    if ("null" !== i && "" !== i) {
                        var o = n;
                        r.timeout = setTimeout(function() {
                            (o || null ) && "true" === r.getAttribute("data-has-done-function") ? o(null ) : sweetAlert.close()
                        }, i)
                    }
                }
                    , y = function() {
                    var e = p()
                        , t = h();
                    s.removeClass(e, "show-input"),
                        t.value = c.default.inputValue,
                        t.setAttribute("type", c.default.inputType),
                        t.setAttribute("placeholder", c.default.inputPlaceholder),
                        b()
                }
                    , b = function(e) {
                    if (e && 13 === e.keyCode)
                        return !1;
                    var t = p()
                        , n = t.querySelector(".sa-input-error");
                    s.removeClass(n, "show");
                    var r = t.querySelector(".sa-error-container");
                    s.removeClass(r, "show")
                }
                    , w = function() {
                    p().style.marginTop = s.getTopMargin(p())
                };
                i.sweetAlertInitialize = f,
                    i.getModal = p,
                    i.getOverlay = m,
                    i.getInput = h,
                    i.setFocusStyle = g,
                    i.openModal = v,
                    i.resetInput = y,
                    i.resetInputError = b,
                    i.fixVerticalPosition = w
            }
                , {
                    "./default-params": 2,
                    "./handle-dom": 4,
                    "./injected-html": 7,
                    "./utils": 9
                }],
            7: [function(e, t, n) {
                Object.defineProperty(n, "__esModule", {
                    value: !0
                });
                n.default = '<div class="sweet-overlay" tabIndex="-1"></div><div class="sweet-alert"><div class="sa-icon sa-error">\n      <span class="sa-x-mark">\n        <span class="sa-line sa-left"></span>\n        <span class="sa-line sa-right"></span>\n      </span>\n    </div><div class="sa-icon sa-warning">\n      <span class="sa-body"></span>\n      <span class="sa-dot"></span>\n    </div><div class="sa-icon sa-info"></div><div class="sa-icon sa-success">\n      <span class="sa-line sa-tip"></span>\n      <span class="sa-line sa-long"></span>\n\n      <div class="sa-placeholder"></div>\n      <div class="sa-fix"></div>\n    </div><div class="sa-icon sa-custom"></div><h2>Title</h2>\n    <p>Text</p>\n    <fieldset>\n      <input type="text" tabIndex="3" />\n      <div class="sa-input-error"></div>\n    </fieldset><div class="sa-error-container">\n      <div class="icon">!</div>\n      <p>Not valid!</p>\n    </div><div class="sa-button-container">\n      <button class="cancel" tabIndex="2">Cancel</button>\n      <div class="sa-confirm-button-container">\n        <button class="confirm" tabIndex="1">OK</button><div class="la-ball-fall">\n          <div></div>\n          <div></div>\n          <div></div>\n        </div>\n      </div>\n    </div></div>',
                    t.exports = n.default
            }
                , {}],
            8: [function(e, t, r) {
                Object.defineProperty(r, "__esModule", {
                    value: !0
                });
                var i = e("./utils")
                    , o = e("./handle-swal-dom")
                    , a = e("./handle-dom")
                    , s = ["error", "warning", "info", "success", "input", "prompt"]
                    , l = function(e) {
                    var t = o.getModal()
                        , r = t.querySelector("h2")
                        , l = t.querySelector("p")
                        , c = t.querySelector("button.cancel")
                        , u = t.querySelector("button.confirm");
                    if (r.innerHTML = e.html ? e.title : a.escapeHtml(e.title).split("\n").join("<br>"),
                            l.innerHTML = e.html ? e.text : a.escapeHtml(e.text || "").split("\n").join("<br>"),
                        e.text && a.show(l),
                            e.customClass)
                        a.addClass(t, e.customClass),
                            t.setAttribute("data-custom-class", e.customClass);
                    else {
                        var d = t.getAttribute("data-custom-class");
                        a.removeClass(t, d),
                            t.setAttribute("data-custom-class", "")
                    }
                    if (a.hide(t.querySelectorAll(".sa-icon")),
                        e.type && !i.isIE8()) {
                        var f = function() {
                            for (var r = !1, i = 0; i < s.length; i++)
                                if (e.type === s[i]) {
                                    r = !0;
                                    break
                                }
                            if (!r)
                                return logStr("Unknown alert type: " + e.type),
                                    {
                                        v: !1
                                    };
                            var l = ["success", "error", "warning", "info"]
                                , c = n;
                            -1 !== l.indexOf(e.type) && (c = t.querySelector(".sa-icon.sa-" + e.type),
                                a.show(c));
                            var u = o.getInput();
                            switch (e.type) {
                                case "success":
                                    a.addClass(c, "animate"),
                                        a.addClass(c.querySelector(".sa-tip"), "animateSuccessTip"),
                                        a.addClass(c.querySelector(".sa-long"), "animateSuccessLong");
                                    break;
                                case "error":
                                    a.addClass(c, "animateErrorIcon"),
                                        a.addClass(c.querySelector(".sa-x-mark"), "animateXMark");
                                    break;
                                case "warning":
                                    a.addClass(c, "pulseWarning"),
                                        a.addClass(c.querySelector(".sa-body"), "pulseWarningIns"),
                                        a.addClass(c.querySelector(".sa-dot"), "pulseWarningIns");
                                    break;
                                case "input":
                                case "prompt":
                                    u.setAttribute("type", e.inputType),
                                        u.value = e.inputValue,
                                        u.setAttribute("placeholder", e.inputPlaceholder),
                                        a.addClass(t, "show-input"),
                                        setTimeout(function() {
                                            u.focus(),
                                                u.addEventListener("keyup", swal.resetInputError)
                                        }, 400)
                            }
                        }();
                        if ("object" == typeof f)
                            return f.v
                    }
                    if (e.imageUrl) {
                        var p = t.querySelector(".sa-icon.sa-custom");
                        p.style.backgroundImage = "url(" + e.imageUrl + ")",
                            a.show(p);
                        var h = 80
                            , m = 80;
                        if (e.imageSize) {
                            var g = e.imageSize.toString().split("x")
                                , v = g[0]
                                , y = g[1];
                            v && y ? (h = v,
                                m = y) : logStr("Parameter imageSize expects value with format WIDTHxHEIGHT, got " + e.imageSize)
                        }
                        p.setAttribute("style", p.getAttribute("style") + "width:" + h + "px; height:" + m + "px")
                    }
                    t.setAttribute("data-has-cancel-button", e.showCancelButton),
                        e.showCancelButton ? c.style.display = "inline-block" : a.hide(c),
                        t.setAttribute("data-has-confirm-button", e.showConfirmButton),
                        e.showConfirmButton ? u.style.display = "inline-block" : a.hide(u),
                    e.cancelButtonText && (c.innerHTML = a.escapeHtml(e.cancelButtonText)),
                    e.confirmButtonText && (u.innerHTML = a.escapeHtml(e.confirmButtonText)),
                    e.confirmButtonColor && (u.style.backgroundColor = e.confirmButtonColor,
                        u.style.borderLeftColor = e.confirmLoadingButtonColor,
                        u.style.borderRightColor = e.confirmLoadingButtonColor,
                        o.setFocusStyle(u, e.confirmButtonColor)),
                        t.setAttribute("data-allow-outside-click", e.allowOutsideClick);
                    var b = !!e.doneFunction;
                    t.setAttribute("data-has-done-function", b),
                        e.animation ? "string" == typeof e.animation ? t.setAttribute("data-animation", e.animation) : t.setAttribute("data-animation", "pop") : t.setAttribute("data-animation", "none"),
                        t.setAttribute("data-timer", e.timer)
                };
                r.default = l,
                    t.exports = r.default
            }
                , {
                    "./handle-dom": 4,
                    "./handle-swal-dom": 6,
                    "./utils": 9
                }],
            9: [function(t, n, r) {
                Object.defineProperty(r, "__esModule", {
                    value: !0
                });
                var i = function(e, t) {
                    for (var n in t)
                        t.hasOwnProperty(n) && (e[n] = t[n]);
                    return e
                }
                    , o = function(e) {
                    var t = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);
                    return t ? parseInt(t[1], 16) + ", " + parseInt(t[2], 16) + ", " + parseInt(t[3], 16) : null
                }
                    , a = function() {
                    return e.attachEvent && !e.addEventListener
                }
                    , s = function(t) {
                    e.console && e.console.log("SweetAlert: " + t)
                }
                    , l = function(e, t) {
                    e = String(e).replace(/[^0-9a-f]/gi, ""),
                    e.length < 6 && (e = e[0] + e[0] + e[1] + e[1] + e[2] + e[2]),
                        t = t || 0;
                    var n, r, i = "#";
                    for (r = 0; 3 > r; r++)
                        n = parseInt(e.substr(2 * r, 2), 16),
                            n = Math.round(Math.min(Math.max(0, n + n * t), 255)).toString(16),
                            i += ("00" + n).substr(n.length);
                    return i
                };
                r.extend = i,
                    r.hexToRgb = o,
                    r.isIE8 = a,
                    r.logStr = s,
                    r.colorLuminance = l
            }
                , {}]
        }, {}, [1]),
            "function" == typeof define && define.amd ? define(function() {
                return sweetAlert
            }) : "undefined" != typeof module && module.exports && (module.exports = sweetAlert)
    }(window, document),
    function() {
        "use strict";
        var e = function() {
            var e = localStorage.getItem("popctrl");
            return e ? JSON.parse(e) : {}
        }
            , t = function(e, t) {
            $.ajax({
                method: "GET",
                url: "https://cn.udacity.com/cn/users/subscriptions",
                headers: {
                    Authorization: "Bearer " + e
                },
                dataType: "json"
            }).done(function(e) {
                t(null , e)
            }).fail(function(e) {
                t(new Error(e.responseText))
            })
        }
            , n = function(e) {
            return e = Object.keys(e).map(function(t) {
                var n = e[t];
                return n.name = t,
                    n.expired_at_ms = new Date(n.expired_at).getTime(),
                    n
            }),
                e.sort(function(e, t) {
                    return e.expired_at_ms < t.expired_at_ms
                })
        };
        $(document).ready(function() {
            var r = Cookies.get("_jwt_token")
                , i = e()
                , o = Date.now();
            r && (i && i.nextPopup && o < i.nextPopup || t(r, function(e, t) {
                if (t) {
                    if (!n(t).filter(function(e) {
                            return e.expired_at_ms > o && e.expired_at_ms <= o + 2592e5
                        })[0])
                        return
                }
            }))
        })
    }(),
    function(e) {
        e.getJwt = function() {
            return Cookies.get("_jwt_token") || Cookies.get("_jwt")
        }
    }(window),
    function(e) {
        function t(e) {
            return 1 === (e + "").length ? "0" + e : e
        }
        function n(e, n, r) {
            return ~e.indexOf(n) ? e.replace(n, t(r)) : e.replace(n.slice(0, n.length / 2), r)
        }
        e.isTimeRange = function(e, t) {
            var n = Date.now();
            return e = e ? new Date(e).getTime() : n,
                t = t ? new Date(t).getTime() : Number.POSITIVE_INFINITY,
            n >= e && n < t
        }
            ,
            e.formatDate = function(e, t) {
                return e = e instanceof Date ? e : new Date(e),
                    t = t || "yyyy年M月d日 h:m:s",
                    t = ~t.indexOf("yyyy") ? t.replace("yyyy", e.getFullYear()) : t.replace("yy", e.getFullYear().toString().slice(2)),
                    t = n(t, "MM", e.getMonth() + 1),
                    t = n(t, "dd", e.getDate()),
                    t = n(t, "hh", e.getHours()),
                    t = n(t, "mm", e.getMinutes()),
                    t = n(t, "ss", e.getSeconds())
            }
    }(window),
    function() {
        "use strict";
        "function" != typeof Object.assign && (Object.assign = function(e, t) {
                if (null == e)
                    throw new TypeError("Cannot convert undefined or null to object");
                for (var n = Object(e), r = 1; r < arguments.length; r++) {
                    var i = arguments[r];
                    if (null != i)
                        for (var o in i)
                            Object.prototype.hasOwnProperty.call(i, o) && (n[o] = i[o])
                }
                return n
            }
        ),
        Array.prototype.find || Object.defineProperty(Array.prototype, "find", {
            value: function(e) {
                if (null == this)
                    throw new TypeError('"this" is null or not defined');
                var t = Object(this)
                    , n = t.length >>> 0;
                if ("function" != typeof e)
                    throw new TypeError("predicate must be a function");
                for (var r = arguments[1], i = 0; i < n; ) {
                    var o = t[i];
                    if (e.call(r, o, i, t))
                        return o;
                    i++
                }
            }
        })
    }(),
    function(e) {
        e.getNDByUrl = function() {
            var e = location.pathname.split("--")[1];
            return e ? e.replace("/", "") : e
        }
            ,
            e.isEmail = function(e) {
                return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(e)
            }
            ,
            e.priceFormat = function(e) {
                e = "000" + e.toFixed(0);
                var t = e.length % 3;
                return e.substr(t).split(/(\d{0,3})/).filter(function(e) {
                    return "" !== e
                }).join(",").replace(/^0+/, "").replace(/^,/, "")
            }
            ,
            e.isWechatBrower = function() {
                return !!e.WeixinJSBridge
            }
    }(window),
    function() {
        "use strict";
        $(function() {
            $(".overlay").each(function() {
                var e = $(this)
                    , t = void 0 !== e.data("close-without-esc")
                    , n = void 0 !== e.data("close-without-border");
                t || $(document).keyup(function(t) {
                    27 == t.keyCode && e.hasClass("active") && $.closeModal(e)
                }),
                n || e.click(function(t) {
                    e.is(t.target) && $.closeModal(e)
                }),
                    e.find("[data-modal-close]").each(function() {
                        $(this).click(function() {
                            $.closeModal(e)
                        })
                    })
            }),
                $.openModal = function(e) {
                    $("[data-modal=" + e + "]").addClass("active"),
                        $("[data-modal=" + e + "] .modal").addClass("active")
                }
                ,
                $.closeModal = function(e) {
                    e = "string" == typeof e ? $("[data-modal=" + e + "]") : e,
                        e.removeClass("active"),
                        e.find(".modal").removeClass("active"),
                        e.find("video").trigger("pause"),
                        e.trigger("modal-closed")
                }
                ,
                $("[data-modal-video]").each(function() {
                    var e = $(this).data("videosite")
                        , t = $(this).data("videoid")
                        , n = $(this).data("modal-video");
                    "undefined" === t && console.error("No video ID defined."),
                        "url" === e ? $(this).click(function() {
                            var e = $('[data-modal="' + n + '"]')
                                , r = e.find("video");
                            r.children(":first-child").attr("src", t),
                                r.load().trigger("play"),
                                e.addClass("active"),
                                e.children(".modal").addClass("active")
                        }) : console.error("Invalid video site: " + e)
                })
        })
    }(),
    function() {
        "use strict";
        $(document).bind("DOMContentLoaded TaskReload", function(e) {
            $("[data-timer]").each(function() {
                window.isTimeRange($(this).data("timer-start"), $(this).data("timer-end")) ? $(this).addClass("display") : $(this).addClass("hide")
            }),
                $("[data-display-uuid]").each(function() {
                    Cookies.get($(this).data("display-uuid")) || $(this).slideDown()
                }),
                $("[data-timer-count]").each(function() {
                    var e = Date.now()
                        , t = new Date($(this).data("timer-count")).getTime()
                        , n = $(this).text()
                        , r = t - e;
                    switch ((/<%(.*)%>/.exec(n) || [])[0]) {
                        case "<%d%>":
                            n = r > 0 ? n.replace("<%d%>", (r / 864e5).toFixed(0)) : 0 === r ? n.replace("<%d%>", "今") : $(this).data("timer-count-end") || ""
                    }
                    n && $(this).text(n)
                })
        }),
            $(document).ready(function() {
                $("[data-hide-uuid]").on("click", function() {
                    var e = $(this).data("display-uuid");
                    Cookies.set(e, "hided", {
                        expires: 1
                    })
                }),
                    window.getJwt() ? ($("[data-show-guest]").addClass("displayNone"),
                    $("[data-show-student]").hasClass("displayNone") && $("[data-show-student]").removeClass("displayNone")) : ($("[data-show-student]").addClass("displayNone"),
                    $("[data-show-guest]").hasClass("displayNone") && $("[data-show-guest]").removeClass("displayNone"))
            })
    }(),
    function() {
        "use strict";
        $(document).ready(function() {
            function e() {
                var e = $("#top_banner")
                    , t = Cookies.get("banner")
                    , n = e.data("banner-id");
                n && t !== n && (e.slideDown(),
                    e.find(".close_banner").on("click", function() {
                        Cookies.set("banner", n, {
                            expires: 1
                        })
                    }))
            }
            var t = window.getJwt()
                , n = function(e) {
                e.preventDefault();
                var t = location.href
                    , n = e.target.href + "?redirect=" + encodeURIComponent(t);
                window.location.href = n
            };
            $("#link-signin").on("click", n),
                $("#link-signup").on("click", n),
                $.ajax({
                    method: "GET",
                    url: "https://cn.udacity.com/cn/marketing/banners",
                    contentType: "application/json",
                    dataType: "json",
                    headers: {
                        Authorization: "Bearer " + t
                    }
                }).done(function(t) {
                    for (var n = 0; n < t.length; n++) {
                        var r = t[n];
                        if (window.isTimeRange(r.start_time, r.end_time)) {
                            $("#top_banner").data("banner-id", "banner-" + r.id),
                                $("#top_banner span.featured:first").html(r.title),
                                $("#top_banner span.featured a").html(r.ref_link_name),
                                $("#top_banner span.featured a").attr("href", r.ref_link),
                                $("#top_banner").trigger("TaskReload");
                            break
                        }
                    }
                    t.length > 0 && e()
                })
        })
    }(),
    function() {
        "use strict";
        window.__i18n = window.__i18n || {},
            window.__i18n["zh-cn"] = {},
            $(function() {
                $.fn.localize = function(e) {
                    $("[data-localize]").each(function() {
                        var t = $(this).data("localize")
                            , n = $(this).html()
                            , r = window.__i18n[e]
                            , i = r[t || n];
                        i && (window.__i18n["zh-cn"][t || i] = n),
                            $(this).html(i || n)
                    })
                }
                    ,
                    $("[data-localize-lang]").click(function() {
                        var e = $(this).data("localize-lang");
                        e && ($(this).localize(e),
                            $("[data-localize-lang]").removeClass("selected"),
                            $(this).addClass("selected"),
                            localStorage.setItem("lang-code", e))
                    }),
                    $(document).ready(function() {
                        var e = localStorage.getItem("lang-code") || "en-us";
                        e && $('[data-localize-lang="' + e + '"]').trigger("click")
                    })
            })
    }(),
    function() {
        "use strict";
        $(document).ready(function() {
            $("[data-href]").click(function() {
                $(this).blur(),
                    $("html, body").animate({
                        scrollTop: $($(this).attr("href")).offset().top - 100
                    }, 500)
            })
        })
    }(),
    function() {
        "use strict";
        $(document).ready(function() {
            $("[data-show-more]").on("click", function() {
                var e = $(this).data("show-more")
                    , t = $(this).data("show-more-hint") || "展开"
                    , n = $(this).data("show-less-hint") || "收起";
                $(e).hasClass("hide") ? ($(e).removeClass("hide"),
                    $(this).text(n)) : ($(e).addClass("hide"),
                    $(this).text(t))
            }),
                $("[data-attr-remove-on]").each(function() {
                    var e = $(this).data("attr-remove-on")
                        , t = ($(this).data("attr-remove") || "").split(",");
                    if (navigator.userAgent.match(RegExp(e || ".*")))
                        for (var n = 0; n < t.length; n++)
                            $(this).removeAttr(t[n])
                })
        })
    }(),
    function() {
        "use strict";
        $(document).ready(function() {
            $(document).ajaxError(function(e, t) {
                401 === t.status && (Cookies.remove("_jwt_token"),
                    Cookies.remove("_jwt"),
                /\/(signin|signup)/.test(location.pathname) || (location.href = "/signin/?redirect=" + encodeURIComponent(location.href)))
            })
        })
    }(),
    function() {
        "use strict";
        $(function() {
            $.fn.counterDown = function(e) {
                function t(e) {
                    return 1 === (e + "").length ? "0" + e : e
                }
                var n = "<span><span>dd</span><span>日</span></span><span><span>hh</span><span>小时</span></span><span><span>mm</span><span>分钟</span></span><span><span>ss</span><span>秒</span></span>";
                e = new Date(e || 0).getTime();
                var r = this
                    , i = setInterval(function() {
                    var o = e - Date.now() - 1e3;
                    if (o <= 0)
                        return void clearInterval(i);
                    o < 864e5 && n.replace("dd", "00"),
                        $(r).html(n.replace("dd", t(Math.floor(o / 864e5))).replace("hh", t(Math.floor(o % 864e5 / 36e5))).replace("mm", t(Math.floor(o % 864e5 % 36e5 / 6e4))).replace("ss", t(Math.floor(o % 864e5 % 36e5 % 6e4 / 1e3))))
                }, 1e3)
            }
        })
    }(),
    function() {
        "use strict";
        $(function() {
            $.fn.autocomplete = function(e) {
                e = e || {};
                var t = e.hints || [e.default]
                    , n = $(this).clone().css({
                    opacity: .5,
                    "border-color": "transparent",
                    "box-shadow": "none",
                    position: "absolute",
                    "z-index": 0,
                    "pointer-events": "none"
                }).removeAttr("placeholder").removeAttr("tabindex");
                $(this).css({
                    "z-index": 1,
                    "background-color": "transparent"
                }),
                    $(this).parent().css("position", "relative"),
                    $(this).after(n),
                    $(this).on("change keyup paste", function() {
                        var r = $(this).val()
                            , i = r;
                        if (r.trim().length >= 4 && r.indexOf("@") >= 0) {
                            var o = r.split("@")[1];
                            if (o)
                                for (var a = 0, s = t.length; a < s; a++) {
                                    var l = t[a].match(RegExp(o + "(.*)"));
                                    if (l && 2 === l.length) {
                                        i = r + l[1];
                                        break
                                    }
                                }
                            else
                                i = r + e.default || ""
                        } else
                            i = r;
                        n.val(i)
                    }),
                    $(this).keydown(function(e) {
                        9 == e.keyCode && n.val() !== $(this).val() && ($(this).val(n.val()),
                            $(this).blur())
                    })
            }
        })
    }(),
    function() {
        "use strict";
        $(function() {
            $._uconfig = function() {
                return {
                    host: "localhost:9999" === location.host ? location.host : "cn.udacity.com",
                    apiBaseUrl: "https://cn.udacity.com",
                    globalBaseUrl: "https://www.udacity.com"
                }
            }
        })
    }(),
    function() {
        "use strict";
        $(function() {
            var e = $._uconfig();
            $.order = $.order || {},
                $.order.trail = function(t, n) {
                    var r = window.getJwt()
                        , i = jwt_decode(r);
                    return $.ajax(Object.assign({
                        method: "POST",
                        url: e.globalBaseUrl + "/api/users/" + i.uid + "/enrollments",
                        data: JSON.stringify({
                            state: "enrolled",
                            node_keys: [t]
                        }),
                        contentType: "application/json",
                        headers: {
                            Authorization: "Bearer " + r
                        },
                        dataType: "text"
                    }, n || {}))
                }
                ,
                $.order.create = function(t, n) {
                    return $.ajax(Object.assign({
                        method: "POST",
                        url: e.apiBaseUrl + "/doggy/api/v2/orders",
                        data: JSON.stringify(t),
                        contentType: "application/json",
                        dataType: "json",
                        headers: {
                            Authorization: "Bearer " + window.getJwt()
                        }
                    }, n || {}))
                }
                ,
                $.order.verify = function(t, n) {
                    return $.ajax(Object.assign({
                        method: "GET",
                        url: e.apiBaseUrl + "/doggy/api/v2/orders/" + t,
                        contentType: "application/json",
                        dataType: "json",
                        headers: {
                            Authorization: "Bearer " + window.getJwt()
                        }
                    }, n || {}))
                }
        })
    }(),
    function() {
        "use strict";
        $(function() {
            var e = $._uconfig();
            $.product = $.product || {},
                $.product.get = function(t, n) {
                    var r = window.getJwt()
                        , i = {};
                    return r && (i.Authorization = r),
                        $.ajax(Object.assign({
                            method: "GET",
                            url: e.apiBaseUrl + "/doggy/api/v2/products/" + t + ".json",
                            contentType: "application/json",
                            dataType: "json",
                            headers: i
                        }, n || {}))
                }
        })
    }(),
    function() {
        "use strict";
        $(function() {
            var e = $._uconfig();
            $.coupon = $.coupon || {},
                $.coupon.apply = function(t, n) {
                    return "string" == typeof code && (t = {
                        coupon_code: t
                    }),
                        $.ajax(Object.assign({
                            method: "POST",
                            url: e.apiBaseUrl + "/cn/payments/apply_coupon",
                            data: JSON.stringify(t),
                            contentType: "application/json",
                            dataType: "json",
                            headers: {
                                Authorization: "Bearer " + window.getJwt()
                            }
                        }, n || {}))
                }
        })
    }(),
    function() {
        "use strict";
        $(function() {
            var e = $._uconfig();
            $.marketing = $.marketing || {},
                $.marketing.getApplyApplication = function(t, n) {
                    return $.ajax(Object.assign({
                        method: "GET",
                        url: e.apiBaseUrl + "/cn/marketing/applications/apply/" + t,
                        contentType: "application/json",
                        dataType: "json"
                    }, n || {}))
                }
        })
    }(),
    function() {
        "use strict";
        $(document).ready(function() {
            function e(e) {
                return (e || []).find(function(e) {
                    return window.isTimeRange(e.payment_start_at, e.payment_close_at)
                })
            }
            function t(e) {
                return (e || []).sort(function(e, t) {
                    var n = new Date(e.payment_start_at)
                        , r = new Date(t.payment_start_at);
                    return n > r ? -1 : n < r ? 1 : 0
                })[0]
            }
            function n(e) {
                return (e || []).find(function(e) {
                    return "precharge" === e.type
                })
            }
            function r(e, t) {
                $("p[data-cohort-intro]").html('<p class="x-small bolder">' + e + "</p>"),
                    $(".video-overlay .overlay-content").append('<div class="counter-down"></div>'),
                    $(".video-overlay .counter-down").counterDown(t)
            }
            function i(e, t) {
                var n = $('<button class="btn btn-primary btn-max-radius">立即申请</button>').click(function(n) {
                    window.analytics && analytics.track("React apply", {
                        cta_key: "apply application clicked",
                        nd_key: e.nd_key,
                        link: t
                    }),
                    t && (location.href = t)
                });
                return $("p[data-cohort-intro]").before(n),
                    n
            }
            function o(e, t) {
                if (h)
                    return h;
                if (e.description && (e.description.indexOf("早鸟价") > -1 || e.description.indexOf("early bird") > -1) && window.isTimeRange(e.start_at, e.end_at))
                    return "early_bird";
                if (a(e))
                    return "AND_apply_application";
                if (/nd019/.test(e.nd_key)) {
                    if (window.isTimeRange(void 0, "2017-06-27T23:59:59.000+08:00"))
                        return "react_apply_application";
                    if (window.isTimeRange(void 0, "2017-06-30T10:00:00.000+08:00"))
                        return "default"
                }
                return e.description && (e.description.indexOf("余付款") > -1 || e.description.indexOf("尾款") > -1) ? "default" : t ? "regular" : "default"
            }
            function a(e) {
                return !!/nd803-cn-basic|nd801-cn-advanced/.test(e.nd_key) && window.isTimeRange("2017-06-13T10:00:00.000+08:00", "2017-06-22T23:59:59.000+08:00")
            }
            function s(e, t) {
                var n = null ;
                "nd803-cn-basic" === e.nd_key && (n = i(e, "https://www.diaochapai.com/survey2554723")),
                "nd801-cn-advanced" === e.nd_key && (n = i(e, "https://www.diaochapai.com/survey2556287")),
                    $("p[data-cohort-intro]").before(n),
                    n.after('<p class="small bolder color-cyan margin-top-1em clear-padding">开课时间：6 月 22 日 | 学费：' + m.price / 100 + " 元</p>"),
                    window.isTimeRange("2017-06-19T23:59:59.000+08:00", "2017-06-22T23:59:59.000+08:00") ? r("第三批申请截止倒计时：", "2017-06-22T23:59:59.000+08:00") : window.isTimeRange("2017-06-16T23:59:59.000+08:00", "2017-06-19T23:59:59.000+08:00") ? r("第二批申请截止倒计时：", "2017-06-19T23:59:59.000+08:00") : r("第一批申请截止倒计时：", "2017-06-16T23:59:59.000+08:00"),
                    $.marketing.getApplyApplication(p).done(function(e) {
                        n.before('<p class="small bolder color-magenta">剩余席位：' + (e.capacity ? parseInt(e.capacity, 10) : 75) + " 人 | 已申请：" + e.count + " 人</p>")
                    })
            }
            function l(e, t, n) {
                $("button[data-enroll-me]").removeClass("hide"),
                    $("button[data-enroll-me]").data("cohort-slot-left", n.max_student_num - n.current_student_num);
                var i = "限时早鸟价：" + t.price / 100 + " 元";
                t.original_price && t.original_price !== t.price && (i += ' <s class="color-white">原价：' + t.original_price / 100 + " 元</s>"),
                    $(".video-overlay button[data-enroll-me]").before('<p class="bolder color-magenta margin-top-1em">' + i + "</p>"),
                    r("距离早鸟价结束还有：", e.end_at)
            }
            function c(e, t) {
                var n = $("button[data-notify-me]").removeClass("hide");
                /^(nd001|nd801|nd803)-cn.*/.test(e.nd_key) && ($("p[data-cohort-intro]").addClass("margin-top-2em"),
                t && $("p[data-cohort-intro]").append('<p class="x-small bolder">价格: ¥ <s>' + window.priceFormat(t.original_price / 100) + "</s> | 报名即将开始</p>"),
                    $("p[data-cohort-intro]").append('<p class="x-small bolder">点击上方按钮加入交流群，获得下期开课通知，了解最新优惠价。</p>')),
                    $.marketing.getApplyApplication(p).done(function(e) {
                        n.removeClass("margin-top-2em").before('<p class="small bolder color-magenta margin-top-2em">名额有限 | 等待人数：' + e.count + " 人</p>")
                    })
            }
            function u(e, t, n) {
                var i = (n.payment_start_at,
                    n.payment_close_at,
                    n.start_at,
                    $("button[data-enroll-me]"));
                i.removeClass("hide").data("cohort-slot-left", n.max_student_num - n.current_student_num);
                var o = "* 本学期价格：" + t.price / 100 + " 元"
                    , a = "限时优惠：" + t.price / 100 + " 元";
                t.original_price && t.original_price !== t.price && (a += ' <s class="color-orange">原价：' + t.original_price / 100 + " 元"),
                    i.before('<p class="bolder color-magenta margin-top-1em">' + a + "</p>"),
                    $("p[data-cohort-intro]").html('<p class="x-small">' + o + "</p>"),
                    r("距离本期报名截止还有：", n.payment_close_at)
            }
            function d(e, t, n) {
                var o = i(e, "https://www.diaochapai.com/survey2562694");
                $.marketing.getApplyApplication(p).done(function(e) {
                    o.removeClass("margin-top-2em").before('<p class="small bolder color-magenta margin-top-2em">名额有限 | 已申请人数：' + e.count + " 人</p>")
                }),
                    window.isTimeRange("2017-06-23T23:59:59.000+08:00", "2017-06-27T23:59:59.000+08:00") ? r("第二批申请截止倒计时：", "2017-06-27T23:59:59.000+08:00") : window.isTimeRange(void 0, "2017-06-23T23:59:59.000+08:00") && r("第一批申请截止倒计时：", "2017-06-23T23:59:59.000+08:00")
            }
            var f, p = window.getNDByUrl(), h = $.urlParam("testmode"), m = {};
            if ("/course/human/" === location.pathname && ($(".video-overlay .overlay-content").append('<div class="counter-down"></div>'),
                    $(".video-overlay .overlay-content").addClass("more-content"),
                    $("p[data-cohort-intro]").html('<p class="micro bolder">免费特价倒计时：</p>'),
                    $(".video-overlay .counter-down").counterDown("2017-04-01T23:59:59.000+08:00"),
                    $("button[data-enroll-humannd]").on("click", function(e) {
                        e.preventDefault(),
                            $.openModal("human-nd")
                    }),
                    $("#human-check").on("click", function(e) {
                        e.preventDefault(),
                            $(".regotcha-container label").hide(),
                            $(".regotcha-container .u-loading").show(),
                            setTimeout(function() {
                                $(".regotcha-container .u-loading").hide(),
                                    $(".human-nd .regotcha-container h6").text("检测结果："),
                                    $(".human-nd .regotcha-container .checkbox").html("<h5>Whoops！很抱歉，你不是机器人，是一名纯正的人类。</h5>"),
                                    $(".human-nd .body").removeClass("hide")
                            }, 3e3)
                    })),
                    /nd101|nd019|-cn-/.test(p)) {
                if ("preview" === $.urlParam("v"))
                    return $("[data-preview-me]").removeClass("hide"),
                        void $("[data-preview-me]").on("click", function(e) {
                            var t = "https://classroom.udacity.com/courses/" + p.replace("nd", "ud") + "-preview";
                            if (!window.getJwt())
                                return void (location.href = location.href = "/signin/?redirect=" + encodeURIComponent(t));
                            location.href = t
                        });
                $("[data-notify-me]").on("click", function(e) {
                    var t = "//s3.cn-north-1.amazonaws.com.cn/cn-static.udacity.com/ndKey/wechat-group-qrcode.jpg".replace("ndKey", p.replace(/-cn.*/, ""));
                    $(".notify-me-success .qrcode img").attr("src", t),
                        $.openModal("notify-me-success")
                }),
                "success" === $.urlParam("notify-me-callback") && $("[data-notify-me]:first").trigger("click"),
                    $("button[data-enroll-me]").on("click", function(e) {
                        if ($(e.target).data("cohort-slot-left") > 0) {
                            var t = "https://cn.udacity.com/payment/?product=" + p;
                            return m.id && (t = t + "&package_id=" + m.id),
                            f && (t = t + "&sku=" + f),
                                window.getJwt() ? location.href = t : location.href = "/signup/?redirect=" + encodeURIComponent(t)
                        }
                        $.openModal("cohort-full")
                    });
                var g = {};
                "nd101" === p && (f = "5866093383122944",
                    g.sku = f),
                    $.product.get(p, {
                        data: g
                    }).done(function(r) {
                        var i = e(r.cohorts)
                            , a = t(r.cohorts);
                        if (a && a.metadata) {
                            var p = a.metadata.uniona_link;
                            if (p)
                                return void $("button[data-union-a]").removeClass("hide").click(function() {
                                    location.href = p
                                })
                        }
                        switch (f = r.sku,
                            m = n(r.price_packages),
                            o(r, i)) {
                            case "early_bird":
                                return l(r, m, i);
                            case "AND_apply_application":
                                return s(r, m);
                            case "react_apply_application":
                                return d(r, m, i);
                            case "regular":
                                return u(r, m, i);
                            default:
                                return c(r, m)
                        }
                    })
            }
        })
    }(),
    function() {
        "use strict";
        $(document).ready(function() {
            /\/robotics/.test(location.pathname) && $("#counter-down").counterDown("2017-06-22 14:58:59")
        })
    }();
